我有这个查询
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
您的第一个案例将转换为:
objects.Where(a => a.property1 == 2 && a.property2 == 3);
而后一个将转换为:
objects.Where(a => a.property1 == 2).Where(a => a.property2 == 3);
不同之处在于后者将被过滤两次,而第一次在 lambda 中进行比较。
这是假设 LINQ-to-Objects;其他提供者将取决于实施。
实际上,这两个语句是相同的,因为 C# 仅在左侧为真时评估 AND 操作的右侧。
如果 C# 不懒惰地进行 AND 评估,那么在大多数项目未能满足第一个标准(或第二个标准是昂贵的评估)的情况下,顺序 WHERE 评估可能会提供相当显着的性能提升。然而,就目前而言,C# 默认情况下是惰性的,因此其性能与惰性评估的 LINQ 相当。
是否存在差异取决于底层 LINQ 提供程序。LINQ 提供程序负责将您的 LINQ 查询转换为底层功能表示,例如 SQL。
对我来说真正的区别是可读性。两个链接的 where 语句会降低可读性。