【发布时间】:2013-01-11 23:26:08
【问题描述】:
如果我手动构建表达式树,运行时似乎会自动确定返回类型。因此,如果我构建一个如下所示的表达式树:
// Order contains a navigation property for Customer
(Order o) => o.Customer;
运行时将返回类型确定为客户,本质上是这样的:
Expression<Func<Order, Customer>> efd = (Order o) => o.Customer;
如何构建它 - 或更改我构建的内容,因此返回是对象,即表达式为:
Expression<Func<Order, object>> ef = (Order o) => o.Customer;
这是通用的,我在编译时不知道返回类型是 Customer;它可以是(在这种情况下)订单中的任何导航属性。
澄清
假设我从这样的表达式开始:
Expression<Func<OrderDTO, object>> ef = (OrderDTO o) => o.Customer;
我有一个例程正在重建它,通过遍历树并根据从/到类型的映射更改类型,将 OrderDTO 的类型更改为 Order。这就是我正在做的所有事情,但结果表达式是
Expression<Func<Order, Customer>> ef = (Order o) => o.Customer;
因此,当我重建树时,我需要以某种方式指定返回类型 - 看起来系统会自动确定返回类型,因为我并没有指定它。谢谢,雷
【问题讨论】:
-
那么,你最后的表达有什么问题?
-
这里不完全清楚你在问什么,你是在问如何更改现有表达式树的返回类型?或者您是否在问如何格式化您的 lambda 表达式以便您可以控制返回类型?
-
(Order o) => (object)o.Customer? -
你有没有尝试过类似
Func<Order, T> GetLamba<T>(...);的泛型 -
你能编辑你的问题并添加你的重写代码吗?
标签: c# lambda expression-trees