C# 用Lambda表达式叠加where条件

C# 用Lambda表达式叠加where条件,c#,linq,lambda,C#,Linq,Lambda,我们通常在中添加多个条件,其中表达式以&&分隔(|) 假设,如果我将多个条件叠加在一起,性能有什么不同吗? 例如: 这是电话线吗 dbContext.Students.Where(s=> s.Section = 5 && s.Marks >50).ToList(); 近似 dbContext.Students.Where(s=>s.Section = 5).Where(s=>s.Marks > 50).ToList(); 注意:上面这一行可能是因

我们通常在
中添加多个条件,其中
表达式以
&&
分隔(
|

假设,如果我将多个条件叠加在一起,性能有什么不同吗?

例如:

这是电话线吗

dbContext.Students.Where(s=> s.Section = 5 && s.Marks >50).ToList();
近似

dbContext.Students.Where(s=>s.Section = 5).Where(s=>s.Marks > 50).ToList();

注意:上面这一行可能是因为
Where
返回inturn中具有
Where

的IQueryable语句到达db的时间是调用
.ToList()
时。因此,您之前所做的不会在实践中产生太大的差异


然而,从纯数学性能的角度来看,与这些性能背后的翻译过程有关,应该存在一些差异。这可以通过@sujith karivelil建议的实验来理解,也可以通过深入阅读来理解。

我认为使用“&&”和“| |”运算符而不是多个子句基本上会导致对整个集合进行一次枚举。多个“Where”子句意味着您将枚举整个集合,然后是结果,这可能再次是整个集合。

我建议使用运算符“&&”。。因为它在一个时刻过滤记录,甚至使用多个条件。
但是如果您使用多个where语句,它肯定会影响性能,因为您使用where语句多少次会命中结果查询进行过滤

为什么不试着用秒表呢?可能重复尝试运行sql跟踪,您将看到linq提供程序生成的sql,如@Tolga Evcimen所述,IQueryable仅在调用ToList()时才进行计算called@sr28实际上,它不是一个完全相同的副本,因为您附加的链接谈到了内存中的可枚举项,从linqToSql的角度来看,PO实际上是古玩。据我所知:)@sujithkarivelil当然!!我明白了。你所说的是关于
IEnumerable
,但这看起来像
IQueryable
——而且大多数
IQueryable
实现(除了
AsQueryable()
)都是“可组合的”,这意味着在向外部服务发出低级查询之前,这些操作是由工具组合的(在本例中为数据库)