我希望能夠動態地構建表達式,它本質上是一個屬性選擇器。動態創建一個選擇對象屬性的表達式
我想使用這個,所以我可以提供一個靈活的搜索用戶界面,然後將選定的搜索參數轉換爲實體框架查詢。
我有大部分需要感謝我使用的另一個庫,但缺少將我的查詢字符串參數轉換爲其他庫所需的適當表達式選擇器的最後部分。
庫中取得的參數:
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