Smu*_*202 2 c# ienumerable extension-methods iqueryable .net-4.0
可能真的很简单,请原谅我的无知......
据我所知,有几种Where()
扩展方法:
Queryable.Where<TSource> Method (IQueryable<TSource>, Expression<Func<TSource, Boolean>>)
Enumerable.Where<TSource> Method (IEnumerable<TSource>, Func<TSource, Boolean>)
以上两个扩展都位于System.Linq
命名空间中,因此我可以做到Where()
足以证明我已经导入了正确的命名空间 - 或者是否有我需要的IQueryable扩展的另一个命名空间?
我理解IQueryable<T>
继承自IEnumerable<T>
但为什么我不能获得IQueryable<T>
扩展?
class Test
{
IQueryable<Test> SomeMethod(Func<T, bool> criteria)
{
return new List<Test> { new Test() }.AsQueryable().Where(criteria); // compiler error converting IEnumerable<T> to IQueryable<T>
}
}
Run Code Online (Sandbox Code Playgroud)
如上所示,应该有一个可用的扩展方法返回IQueryable?为什么它会解析为IEnumerable Extensions?
所述Queryable.Where扩展方法期望一个Expression<Func<T, bool>>
(表示一个lambda即表达式树),而不是Func<T, bool>
(拉姆达本身).
这有效:
IQueryable<Test> ApplyCriteria(IQueryable<Test> queryable,
Expression<Func<Test, bool>> criteria)
{ // ?
return queryable.Where(criteria);
}
Run Code Online (Sandbox Code Playgroud)