我正在尝试创建一个用于Entity Framework4.0的基础存储库,但遇到了一些问题。在下面的代码中,为什么不能在一行中完成此操作?
public IEnumerable<T> GetAll<T>(Expression<Func<T, bool>> filter)
{
IEnumerable<T> allCustomers = this.GetAll<T>();
IEnumerable<T> result = allCustomers.Where(filter.Compile());
return result;
}这不是会产生两条SQL语句:一条没有where子句,用于检索所有行,另一条带有where子句,只检索与谓词匹配的行?
如何使用一条SQL语句来实现这一点?如果我试图将filter.Compile()转换为Func,我就不能编译它。
发布于 2010-05-02 02:11:15
试试这个:
this.GetAll<T>().Where(filter);如果您想添加额外的条件并在数据库端执行它们(使用SQL),GetAll()应该返回IQueryable。where的IQueryable版本需要Expression,所以不需要调用Compile()。EF将获取表达式并将其转换为SQL。
在应用过滤器之前,使用Where的IEnumerable版本执行查询并检索表中的所有行。
https://stackoverflow.com/questions/2750934
复制相似问题