使用多个.Where()调用或&& LinqToEntities查询的条件

时间:2010-10-07 15:51:26

标签: c# entity-framework

以下两个查询是否相同?如果它们不相同,哪个表现更好?有没有办法可以看到查询的sql输出?

var query1 = items.Where(i => i.Enabled == true).Where(i => i.Name == "Bob");

var query2 = items.Where(i => i.Enabled == true && i.Name == "Bob");

2 个答案:

答案 0 :(得分:3)

正如安德鲁所说,这两个选项是等价的。一个实际有用的区别是您可以通过编程方式轻松生成Where子句中的条件。例如,如果您想要排除某些名称:

var query = items;
for(string name in excluded) 
  query = query.Where(i => i.Name != excluded); 

使用&&运算符编写查询时,这是无法轻松完成的事情。

答案 1 :(得分:2)

两个查询都将转换为相同的SQL - 你可以使用像LinqPad这样的工具来验证这个(如果你愿意的话)。将表达式树转换为T-SQL的LINQ提供程序足够聪明,可以理解这些查询是同义词。当然,这意味着两个查询的表现也相同。