以下两个查询是否相同?如果它们不相同,哪个表现更好?有没有办法可以看到查询的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");
答案 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提供程序足够聪明,可以理解这些查询是同义词。当然,这意味着两个查询的表现也相同。