如何获取 IQueryable扩展方法而不是 IEnumerable扩展?
可能非常简单,所以请原谅我的无知...
据我所知,Where()
扩展方法有几种风格:
Queryable.Where
Enumerable.Where
以上两个扩展都位于 System.Linq
命名空间中,这样我就可以do Where()
希望足以证明我已经导入了正确的命名空间 - 或者 IQueryable 扩展是否需要另一个命名空间?
我明白 IQueryable
继承自 IEnumerable
但为什么我无法获得 IQueryable
扩展?
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>
}
}
如上所示,应该有一个返回 IQueryable 的可用扩展方法吗?为什么它解析为 IEnumerable 扩展?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Queryable.Where 扩展方法 需要一个
Expression> ;
(即表示 lambda 的表达式树),而不是Func
(lambda 本身)。这有效:
The Queryable.Where Extension Method expects an
Expression<Func<T, bool>>
(i.e. an expression tree representing a lambda), not aFunc<T, bool>
(a lambda itself).This works:
IQueryable.Where()
仅适用于Expression>
作为谓词参数。IQueryable<T>.Where()
only works withExpression<Func<T, bool>>
as predicate argument.