9

我在尝试转换以下 linq 表达式时感到头疼。

    Expression<Func<T, object>>

到以下 linq 表达式...

    Expression<Func<T, U>>

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

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

4

2 回答 2

10

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

  1. 使用Expression.Convert源表达式的主体来创建结果的主体。
  2. 使用这个主体并重用源表达式的参数来创建转换后的 lambda 表达式Expression.Lambda

尝试这个:

Expression<Func<T, object>> source = ...

var resultBody = Expression.Convert(source.Body, typeof(U));    
var result = Expression.Lambda<Func<T, U>>(resultBody, source.Parameters);
于 2013-02-25T13:21:51.960 回答
0

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

我从

Expression<Func<TIModel, bool>> iFilter

Expression<Func<TModel, bool>> filter

我只是从 Ani 的回答中得到启发并转换为:

var filter = Expression.Lambda<Func<TModel, bool>>(iFilter.Body, iFilter.Parameters);
于 2019-09-02T08:09:57.773 回答