转换表达式<func <tmodel,ilist <titem =“”>&gt;&gt;表达式<func <tmodel,ienumerable =“”>&gt; </func <tmodel,> </func <tmodel,>

时间:2012-05-25 10:21:34

标签: c# .net generics expression enumerable

我有一些方法:

public void Foo(Expression<Func<TModel, IEnumerable>> expression) {
  // foo
}

我有变量:

Expression<Func<TModel, IList<TItem>>> expression;

如何将变量传递给Foo

2 个答案:

答案 0 :(得分:4)

您必须转换表达式变量:

var exp = Expression.Lambda<Func<TModel, IEnumerable>>(expression.Body, expression.Parameters);
Foo(exp);

答案 1 :(得分:1)

使用此:

    public Expression<Func<TModel, IEnumerable>> ConvertExpression<TModel, TItem>(Expression<Func<TModel, IList<TItem>>> expression)
    {
        return (Expression<Func<TModel, IEnumerable>>)Expression
            .Lambda(Expression.Convert(expression.Body, typeof(IEnumerable)), expression.Parameters);
    }