2009-11-07 2 views
1

Voici le code que je dois modifier:Troubles créant une bonne expression 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 }); 

En ce moment, l'expression que je suis en train de sortir de c'est (x => x.RowId == id) et ce que je veux changer pour est (x => x.RowId) de sorte que Je peux l'utiliser dans un OrderBy pour la méthode ObjectContext.CreateQuery(T) appelée plus tard.

Est-ce que quelqu'un sait comment changer le code ci-dessus afin que le lambda soit correct à utiliser dans un OrderBy pour commander par le champ ID?

Notes de côté: Le RowId vient de this._KeyProperty Je crois. Cela fait partie d'un référentiel générique en utilisant le cadre de l'entité sur Asp.Net MVC

Répondre

3

omettez simplement la création de la constante et « = »:

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

Cela suppose que _KeyProperty est de type « bool ». S'il a un type différent, changez juste Func < E, bool> au type approprié.

(Edité à incorporer asgerhallas et bonnes suggestions de LukLed)

+1

Je crois qu'il devrait être un Func ou quelque chose comme ça alors. – asgerhallas

+0

Ou plus précisément le type de la propriété clé ... – asgerhallas

+0

Merci de le signaler. J'ai mis à jour la réponse. –