我希望能够动态地构建表达式,它本质上是一个属性选择器。动态创建一个选择对象属性的表达式
我想使用这个,所以我可以提供一个灵活的搜索用户界面,然后将选定的搜索参数转换为实体框架查询。
我有大部分需要感谢我使用的另一个库,但缺少将我的查询字符串参数转换为其他库所需的适当表达式选择器的最后部分。
库中取得的参数:
Expression<Func<TObject, TPropertyType>>
如何,如果烘烤成一个应用程序将是这将被编码的一个例子:
Expression<Func<MyObject, int>> expression = x=> x.IntegerProperty;
不过,我需要能够产生这个表达式是动态的,重要的一点是我将知道的是对象类型(MyObject)和属性名称作为字符串值(“IntegerProperty”)。属性值显然会映射到可能是任何非复杂类型的对象的属性。
所以基本上我想我想找到一种动态构建表达式的方式,它指定要返回的正确对象属性以及返回值由属性类型确定的位置。
伪代码:
string ObjectPropertyName
Type ObjectType
Type ObjectPropertyType = typeof(ObjectType).GetProperty(ObjectPropertyName).Property
Expression<Func<[ObjectType], [ObjectPropertyType]>> expression = x=> x.[ObjectPropertyName];
更新:
我已经得到尽可能这
ParameterExpression objectParameter = Expression.Parameter(type, "x");
MemberExpression objectProperty = Expression.Property(objectParameter, "PropertyNameString");
Expression<Func<ObjectType, int>> expression = Expression.Lambda<Func<ObjectType, int>>(objectProperty, objectParameter);
但我有这个问题是返回类型并不总是一件int但可能是其他类型。
你有'ObjectType'作为'Type'或泛型类型参数吗?你打算如何在库中调用正确版本的方法? –
您有这些类型的ExpressionBuilder类,但我认为可能有更简单的方法来解决您的问题。哪个图书馆是“其他图书馆”,以及你在什么类别上调用什么方法? – Tewr
我有ObjectType作为泛型类型参数 – Kramer00