使用Queryable而不是Extension方法

时间:2012-10-16 21:13:08

标签: c# linq entity-framework resharper

ReSharper建议我做出以下改动:

自:

foreach (var item in db.Proposta.GroupBy(x => x.StatusProposta.Nome))
{
    ...
}

要:

foreach (var item in Queryable.GroupBy(db.Proposta, x => x.StatusProposta.Nome))
{
    ...
}

消息为:将方法'GroupBy'调用为静态方法

我正在使用实体框架数据库是我的背景。

我想知道我可以获得什么样的优势,或者我可以通过这样的改变避免出现的问题。

2 个答案:

答案 0 :(得分:2)

Resharper只是提供它可以为你做的事情。它同样会将静态方法调用转换为扩展方法调用。

真的是一个偏好的问题 - 一方面没有优势 - 它们编译成相同的东西,但你应该使用它作为扩展方法。在使用LINQ时,使用扩展方法语法扩展方法而不是普通静态调用会更受欢迎。

答案 1 :(得分:0)

来自Extension Methods (C# Programming Guide)

  

在您的代码中,您使用实例方法调用扩展方法   句法。但是,由中间语言(IL)生成   编译器将您的代码转换为静态方法的调用。   因此,封装原理并非如此   侵犯。实际上,扩展方法无法访问私有变量   他们正在扩展的类型。