linq中“and”和“wheres”之间是否存在真正的区别?

时间:2013-03-21 19:47:39

标签: c# .net linq

我有这个查询

 from a in objects
 where a.property1 == 2
 && a.property2 == 3
 select a

from a in objects
where a.property1 == 2
where a.property2 == 3
select a

我想知道如何执行语句以及使用其中的好处会有什么不同

截至目前,我的问题是linq to objects

3 个答案:

答案 0 :(得分:4)

您的第一个案例将转换为:

objects.Where(a => a.property1 == 2 && a.property2 == 3);

而后者将转换为:

objects.Where(a => a.property1 == 2).Where(a => a.property2 == 3);

不同之处在于后者将被过滤两次,而第一次是在lambda中进行比较。

这是假设LINQ到对象;其他提供商将依赖于实施。

答案 1 :(得分:0)

实际上,这两个语句是相同的,因为如果左侧是真的,C#只会评估AND操作的右侧。

如果C#对于AND评估并不懒惰,那么在大多数项目不能满足第一个标准(或第二个标准是昂贵的评估)的情况下,顺序WHERE评估可能会提供相当显着的性能提升。然而,就目前而言,C#默认是懒惰的,因此与懒惰评估的LINQ相当。

答案 2 :(得分:0)

如果存在差异取决于底层的LINQ提供程序。 LINQ提供程序负责将您的LINQ查询转换为基础功能表示,例如SQL。

对我而言,真正的区别在于可读性。两个链接的语句会降低可读性。

相关问题