3

我想在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);
4

1 回答 1

3

这应该可以解决问题:

https://gist.github.com/4149424

我还没有编译结果表达式,但它毫无例外地构建了表达式。

编辑:我添加了一行来创建 lambda 并对其进行编译,它确实如此,所以它可以工作。

它处理您访问集合属性的场景Orders.OrderID,这是使它变得复杂的部分。没有它,它会缩短大约 30 行。

目前,它所做的是将字符串拆分为 '.' 然后它递归地处理每个元素。如果元素是IEnumerable(但不是字符串),它会构建一个额外的Selectlambda。

它还处理稍微复杂(但更多相同)的场景,您可以在集合属性中访问集合属性。

于 2012-11-26T17:19:23.497 回答