需要 Func 提供给 IEnumerable 和 IQueryable 的Where()方法
我有一个 Func 定义如下:
Func<Foo, bool> IsSuperhero = x => x.WearsUnderpantsOutsideTrousers;
我可以像这样查询 IEnumerables:
IEnumerable<Foo> foos = GetAllMyFoos();
var superFoos = foos.Where(IsSuperhero);
但是当我尝试向 IQueryable 的Where 方法提供相同的 Func 时,我得到:
'无法将源类型 System.Collections.Generic.IEnumerable 转换为 System。 Linq.IQueryable。'
这是怎么回事?如何定义一个 Func 来作为 IEnumerable 和 IQueryable 的规范?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
IQueryable
的 LINQ 方法采用 表达式树,不是普通代表。因此,您需要将
func
变量更改为Expression>
,如下所示:要将同一变量与
IEnumerable< ;T>
,您需要调用AsQueryable()
或Compile()
,如下所示:IQueryable
's LINQ methods take Expression Trees, not normal delegates.Therefore, you need to change your
func
variable to anExpression<Func<Foo, bool>>
, like this:To use the same variable with an
IEnumerable<T>
, you'll need to callAsQueryable()
orCompile()
, like this: