DbSet 两种 Where 查询的性能问题
说白了 DBSet.Where() 有两个重载,一个是IQueryable还有一个是IEnumerable,前者则是会延迟执行,而后者则是将整个数据集加载出来之后再进行Where查询。
IQueryable这个查询对象接收的是Expression<Func<T,bool>>,也就是一个表达式树,他将会把查询条件解析成SQL,在数据源提供器里面执行查询。
而List是一个集合,他接收的是一个Func<T,bool>,也就是一个查询委托,他则是将整个DBSet加载出来放在内存之后,再进行查询,所以后者性能堪忧。
详细请查看StackOverflow上面的这两篇问题:
Func vs Manually expression performance in C# lambda
Why would you use Expression rather than Func?