我想在 linq 表达式 中转换字符串“Employee.Orders.OrderID”:“employee.Orders.Select(order = > order.OrderID)”。
我已经知道如何在诸如“Employee.FirstName”之类的简单属性中执行此操作,我的问题是如何在集合中某个类型的属性中执行此操作。
“Order”是“Employee”类中的订单集合。 “OrderID”是“Order”类的一个属性。
也就是说,我要改造这个;
string path = "Employee.Orders.OrderID";
进入这个;
Expression<Func<Employee, object>> exp = employee => employee.Orders.Select(order => order.OrderID);
最佳答案
这应该可以解决问题:
https://gist.github.com/4149424
我没有编译生成的表达式,但它毫无异常(exception)地构建了表达式。
编辑:我添加了一行来创建 lambda 并编译它,它确实如此,所以它可以工作。
它处理您访问集合 Orders.OrderID
的属性的场景,这是使它有点复杂的部分。没有它,它会缩短大约 30 行。
目前,它所做的是将字符串拆分为“.”。然后它递归地处理每个元素。如果元素是 IEnumerable
(但不是字符串),它会构建一个额外的 Select
lambda。
它还处理稍微复杂(但更多相同)的场景,即您访问集合属性中的集合属性。
关于c# - 如何从字符串创建属性(集合)表达式选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13543140/