【发布时间】:2010-02-17 09:10:32
【问题描述】:
在Entity框架中,会不会声明
MyDataContext.Products.OrderByDescending( (p) => p.Id ).GroupBy<Product,int>( (p) => p.ProductId ).Select( (g) => g.FirstOrDefault()).Where( (p) => p.Name.Equals("Something") );
导致另一个数据库查询而不是
MyDataContext.Products.Where( (p) => p.Name.Equals("Something") ).OrderByDescending( (p) => p.Id ).GroupBy<Product,int>( (p) => p.ProductId ).Select( (g) => g.FirstOrDefault());
换句话说,对 Where() 和 GroupBy() 的调用顺序是否会影响对数据库的最终查询?还是实体框架足够聪明来解决这个问题?
我想知道的原因是,在我正在开发的系统中,我们需要跟踪对产品行的所有更改。我们使用的解决方案是在表中插入一个新的产品行,而不是更新它。然后使用“ProductId”字段将产品的不同版本组合在一起。因此,我想将“分组”逻辑移至外部方法,但仍允许调用者指定 Where 条件……所以我的目标是使用第一种方法。
【问题讨论】:
-
为什么不使用分析器工具(例如SQL Server profiler)来看看执行的查询有什么不同?
-
感谢您的提示,这实际上是我的第一个想法,但我在 SQL Server 上没有足够的权限......但我总是可以在 SQL Server 上安装数据库的本地副本以这种方式表达并尝试..
标签: c# entity-framework generics ienumerable