我想在 linq表达式中转换字符串“ Employee.Orders.OrderID ”:“ employee.Orders.Select(order = > order.OrderID) “。
我已经知道如何在简单的属性中执行此操作,例如“Employee.FirstName”,我的问题是如何在集合中的类型中的属性中执行此操作。
“订单”是“员工”类中的订单集合。 “OrderID”是“Order”类的属性。
换句话说,我想改变它;
string path = "Employee.Orders.OrderID";
进入这个;
Expression<Func<Employee, object>> exp = employee => employee.Orders.Select(order => order.OrderID);
答案 0 :(得分:2)
这应该可以解决问题:
https://gist.github.com/4149424
我没有编译生成的表达式,但它构建了表达式而没有异常。
编辑:我添加了一行来创建lambda并进行编译,它确实如此,所以它可以工作。
它处理您访问集合Orders.OrderID
的属性的场景,这使得它变得复杂。没有它,它将缩短约30行。
目前,它的作用是将字符串拆分为'。'然后它以递归方式处理每个元素。如果元素是IEnumerable
(但不是字符串),则构建一个额外的Select
lambda。
它还处理一个稍微复杂(但更多相同)的场景,您可以在其中访问集合属性中的集合属性。