qui*_*qui 5 c# iqueryable linq-to-sql
我有两个非常相似的方法:
public IQueryable<User> Find(Func<User, bool> exp)
{
return db.Users.Where(exp);
}
public IQueryable<User> All()
{
return db.Users.Where(x => !x.deleted);
}
Run Code Online (Sandbox Code Playgroud)
顶部的一个,不会编译,说它返回IEnumerable而不是IQueryable.
为什么是这样?
此外,我知道我可以在最后添加"AsQueryable()",它将工作.虽然这有什么不同?任何表演命中?我知道IQueryable延迟执行等等,我还能获得这个好处吗?
Jon*_*eet 17
Enumerable.Where需要Func<T, bool>.
Queryable.Where需要Expression<Func<T, bool>>.
您正在调用Where with a Func<T, bool>,因此只有该Enumerable.Where调用适用,并返回IEnumerable<T>.
将您的方法更改为:
public IQueryable<User> Find(Expression<Func<User, bool>> exp)
{
return db.Users.Where(exp);
}
Run Code Online (Sandbox Code Playgroud)
它应该没问题.基本上,您希望传入表达式树而不是委托,以便表达式可以转换为SQL.