如何转换Linq表达式与不同的返回类型?

时间:2012-11-22 03:53:55

标签: c# .net linq expression-trees linq-expressions

我正在努力转换以下linq表达式。

    Expression<Func<T, object>>

以下linq表达式...

    Expression<Func<T, U>>

在上面的示例中,对象始终为U类型。

我知道在参数类型之间进行转换/转换是多么容易,但我不太清楚如何在返回类型之间进行转换。

3 个答案:

答案 0 :(得分:8)

您需要通过以下方式创建新表达式:

  1. 在源表达式的主体上使用Expression.Convert来创建结果的主体。
  2. 使用此主体并重用源表达式的参数,以Expression.Lambda创建转换后的lambda表达式。
  3. 试试这个:

    Expression<Func<T, object>> source = ...
    
    var resultBody = Expression.Convert(source.Body, typeof(U));    
    var result = Expression.Lambda<Func<T, U>>(resultBody, source.Parameters);
    

答案 1 :(得分:0)

我的案例是将接口输入类型转换为MongoDB通用存储库的具体类型。

我正在从中转换

Expression<Func<TIModel, bool>> iFilter

Expression<Func<TModel, bool>> filter

我只是从Ani的答案中得到启发,并像这样转换:

var filter = Expression.Lambda<Func<TModel, bool>>(iFilter.Body, iFilter.Parameters);

答案 2 :(得分:-1)

一个具体的例子在这里会有所帮助,但我怀疑在linq select语句中转换对象(通过强制转换)将完成你需要做的工作。