我有接收Type和Expression的类(没有TDeligate)。
我知道Expression基于:Expression<Func<T, bool>>
,但我没有T
。相反,我有Type
。
我需要的是对列表执行表达式并返回结果的子列表。
像list.Where(Expression)
这样的东西。
这是方法:
public IEnumerable Query(Type type, Expression exp) {
var list = GetListByType(type);
return list.Where(exp); // << How do I make this happen?
}
编辑#1
我设法将我的表达式转换为LambdaExpression(正如William建议的那样):
var d = Expression.Lambda(exp).Compile();
现在我的问题是:d
以上评估为Func<Category, bool>
(其中Category
是T
)。
现在,如果我尝试执行此操作:return list.Where(d);
编译器说:
无法从用法推断出类型参数。尝试明确指定类型参数。
问题在于我无法将d
投放到Func<T, bool>
,因为我没有T
。
正如我在开头提到的那样,我没有T
,我确实有typeof(T)
将d
投射到Func<object, bool>
也无效。
任何想法如何解决这个问题?
如何针对d
实际执行list
?
编辑#2(变通方法/解决方案)
我终于最终生成了一些CodeDom来解决问题 如果有人找到更漂亮的解决方案,我真的很想听到它。