我有接收类型和表达式的类(没有 TDeligate)。我知道表达式基于: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(正如威廉建议的那样),如下所示:
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 来解决这个问题。
如果有人找到更漂亮的解决方案,我真的很想听听。