【发布时间】:2016-07-14 16:44:18
【问题描述】:
考虑以下 lambda 表达式:
IQueryable<Product> query = query.Where(x => x.ProductName.Contains("P100"));
我需要将上面的代码转换成这样:
IQueryable<Product> query = query.Where(x => x.GetPropertyValue("ProductName").Contains("P100"));
这里我添加了一个虚拟方法GetPropertyValue("ProductName") 来解释需求。
在上面的代码中,属性应该在运行时解析。换句话说,我需要从一个字符串值访问该属性,例如 "ProductName"
我该怎么做?
【问题讨论】:
-
我的意思是我必须让这个方法更通用。根据我的应用程序逻辑,我只有属性名称作为字符串值。所以我需要将字符串解析为属性。
-
您的查询处理器是什么?它甚至支持在
Product对象上使用GetPropertyValue()方法吗?如果不支持,则进行转换是没有意义的。 -
你需要学习Linq Expressions,或者你需要使用Dynamic Linq。
-
@DavidG 这与您所引用的问题完全不同,因为大多数 Linq 提供程序无法使用反射。
标签: c# linq lambda iqueryable