执行给定的表达式(没有委托),其中T仅在运行时知道

时间:2013-10-13 04:20:15

标签: c# linq lambda expression predicate

我有接收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>(其中CategoryT)。 现在,如果我尝试执行此操作:return list.Where(d);编译器说:

  

无法从用法推断出类型参数。尝试明确指定类型参数。

问题在于我无法将d投放到Func<T, bool>,因为我没有T。 正如我在开头提到的那样,我没有T,我确实有typeof(T)d投射到Func<object, bool>也无效。

任何想法如何解决这个问题?

如何针对d实际执行list

编辑#2(变通方法/解决方案)

我终于最终生成了一些CodeDom来解决问题 如果有人找到更漂亮的解决方案,我真的很想听到它。

0 个答案:

没有答案