c# - 如何在具有不同返回类型的 Linq 表达式之间进行转换?

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

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

    Expression<Func<T, object>>

到下面的 linq 表达式...

    Expression<Func<T, U>>

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

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

最佳答案

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

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

试试这个:

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

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

关于c# - 如何在具有不同返回类型的 Linq 表达式之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13505650/

相关文章:

c# - 创建一个列表框,其中的项目在被选中时会展开( Accordion )

c# - 更改用户控件上的光标

c# - 如何迭代 Linq 组结果集?

linq - OpenXML linq 查询

C#进程线程无法写入输出

c# - 写入文件后立即读取文件我得到全零(.net)

c# - 我在一个 View 中混合了创建 View 和索引 View 代码。那么,如何通过 asp.net MVC4 中的 View 从数据库中检索数据?

c# - 无法从 Task.FromAsync 方法中的组中选择方法

.net - 是否有办法确定哪个元素导致.net中的反序列化错误

java - LINQ(或 linq)是一个利基工具,还是正在成为基础工具?