3

我有这个查询

 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

4

3 回答 3

4

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

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

而后一个将转换为:

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

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

这是假设 LINQ-to-Objects;其他提供者将取决于实施。

于 2013-03-21T19:51:39.190 回答
0

实际上,这两个语句是相同的,因为 C# 仅在左侧为真时评估 AND 操作的右侧。

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

于 2013-03-21T19:51:45.623 回答
0

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

对我来说真正的区别是可读性。两个链接的 where 语句会降低可读性。

于 2013-03-21T19:51:51.553 回答