作者:Ww不孤单_584 | 来源:互联网 | 2022-12-10 14:03
我有以下内容:
class Base
class Derived : Base
IQueryable queryable = ???
Expression> filter = ???
我想用表达式过滤可查询,然后返回一个IQueryable
.
但是,Expression
是不变的.这意味着queryable.Where(filter)
被推断为Where(this IQueryable, Expression>)
,IQueryable
而不是返回IQueryable
.
C#不允许filter
被转换为Expression>
和的铸造IQueryable
返回通过Where
对IQueryable
在运行时出现故障.
围绕这个最好的方法是什么?
1> Marc Gravell..:
务实的解决方案是:
var result = queryable.Where(filter).Cast();
您也可以通过重写表达式树来完成它,但是......它似乎不值得.但它有效:
var typed = Expression.Lambda>(
filter.Body, filter.Parameters);
var result = queryable.Where(typed); // IQueryable