Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多个.Where()调用或&&;LinqToEntities查询的条件_C#_Entity Framework - Fatal编程技术网

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

C# 使用多个.Where()调用或&&;LinqToEntities查询的条件,c#,entity-framework,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"); 这两个查询都将转换为同一个SQL—如果需要,您可以使用LinqPad之类的工具来验

以下两个查询是否等效?如果它们不相等,哪一个性能更好?有没有办法查看查询的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");

这两个查询都将转换为同一个SQL—如果需要,您可以使用LinqPad之类的工具来验证这一点(我刚刚做了)。将表达式树转换为T-SQL的LINQ提供程序足够聪明,可以理解这些查询是同义的。当然,这意味着这两个查询的性能相同。

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

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

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

查询
有什么问题。其中(i=>!exluded.Contains(i.Name))
?上次检查的EF不支持Contains。另外,这只是一个示例,通常您只想使用那些具有值的过滤器,因此它变成if(foo!=null)(query=query.where(x=>x.foo==foo)@Jamiec:如果支持
包含
,那么当然可以。但是,在
中编写
子句是更一般的方法-您可以使用它来表示更一般的条件。@Andrey,@Thomas:
包含
在EF 4中受支持,但在EF 1中不受支持。