2009-11-07 37 views
1

這是我需要改變代碼:故障創造一個適當的lambda表達式

var xParam = Expression.Parameter(typeof(E), typeof(E).Name); 
MemberExpression leftExpr = MemberExpression.Property(xParam, this._KeyProperty); 
Expression rightExpr = Expression.Constant(id); 
BinaryExpression binaryExpr = MemberExpression.Equal(leftExpr, rightExpr); 
//Create Lambda Expression for the selection 
Expression<Func<E, bool>> lambdaExpr = Expression.Lambda<Func<E, bool>>(binaryExpr, new ParameterExpression[] { xParam }); 

現在我得到了這個表達式爲(x => x.RowId == id),我想改變它什麼是(x => x.RowId)使我可以在OrderBy中用於稍後調用的ObjectContext.CreateQuery(T)方法。

有誰知道如何更改上面的代碼,以便在OrderBy中使用的lambda正確使用ID字段進行排序?

附註: RowId來自this._KeyProperty我相信。這是Asp.Net MVC

回答

3

只要忽略創建常數,「=」使用實體框架的通用倉庫的一部分:

var xParam = Expression.Parameter(typeof(E), "x"); 
    var propertyAccessExpr = Expression.Property(xParam, this._KeyProperty); 
    var lambdaExpr = Expression.Lambda<Func<E, bool>>(propertyAccessExpr, xParam); 

這假定_KeyProperty有「BOOL」類型。如果它有不同的類型,只需將Fool < E,bool>更改爲適當的類型。

編輯納入asgerhallas和LukLed的好建議)

+1

我相信它應該是一個函數功能或類似的東西呢。 – asgerhallas 2009-11-07 21:16:41

+0

或更確切地說,關鍵屬性的類型... – asgerhallas 2009-11-07 21:19:33

+0

感謝您指出。我更新了答案。 – 2009-11-07 21:20:51