我正在使用Microsoft的Entity Framework作为ORM,我想知道如何解决以下问题.我想Product从Products集合中获得Product.StartDate比当今更大的对象.(这是整个问题的简化版本.)
我目前使用:
var query = dbContext.Products.Where(p => p.StartDate > DateTime.Now);
Run Code Online (Sandbox Code Playgroud)
执行此操作时,在使用ToList()例如查询后,它可以正常工作,并且创建的SQL是有效的:
SELECT * FROM Product WHERE StartDate > (GetDate());
Run Code Online (Sandbox Code Playgroud)
但是,我想将谓词移动到一个函数以获得更好的可维护性,所以我尝试了这个:
private Func<Product, bool> GetFilter()
{
Func<Product, bool> filter = p => p.StartDate > DateTime.Now;
return filter;
}
var query = dbContext.Products.Where(GetFilter());
Run Code Online (Sandbox Code Playgroud)
这也是从代码的角度来看,只要它返回相同的Product集合,但这次创建的SQL类似于:
SELECT * FROM Product;
Run Code Online (Sandbox Code Playgroud)
筛选器从SQL Server移动到客户端,使其效率降低.
所以我的问题是:
我可能是愚蠢的,但在运行代码后似乎永远不会在'lambda窗口'中显示任何内容.任何人都可以解释它应该如何工作?