2017-05-29 4 views
0

J'ai demandé this question il y a quelques jours et j'ai eu une bonne réponse. Il y a encore une chose avec laquelle j'ai des problèmes. Comment chercher faux lors de la construction d'un Expression Tree.C# Expression - Comment vérifier les faux

Voici un exemple:

query.Where(d => (allCk && d.FacilityId == facilityId) //1. 
      || 
      (!allCk && allSelected && d.FacilityId == facilityId && !ids.Contains(d.Id)) //2. 
      || 
      (!allCk && !allSelected && ids.Contains(d.Id)) //3. 

Jusqu'à présent, vérifier si d.FacilityId == facilityId et ids.Contains(d.Id) sont les parties les plus faciles.

Maintenant, comme vous pouvez le voir, en fonction du bloc, les mêmes booléens sont vérifiés pour la véracité et ailleurs, c'est le contraire. Par exemple, dans la ligne 1: le succès est quand allCK == true tandis que dans les 2 autres, allCK == false.

Voici comment j'ai écrit la première ligne.

/* d */ 
     ParameterExpression pe = Expression.Parameter(typeof(Document), "d"); 

     /*(allCk && d.FacilityId == facilityId) ==> exp0*/ 
     var facilityParam = Expression.Constant(facilityId); 
     var allCkParam = Expression.Constant(allCk); 

     Expression facilityIdProp = Expression.Property(pe, "FacilityId"); 
     Expression facilityIdEql = Expression.Equal(facilityIdProp, facilityParam); 

     Expression exp0 = Expression.AndAlso(allCkParam, facilityIdEql); 

Comment puis-je exprimer mon intention que, par exemple, le succès est quand allCK == false? (Qui comprend la ligne 2 et 3 où allCK, allSelected et ids.Contains() doivent retourner false)

Merci de nous aider

Répondre

3

Vous devez simplement envelopper votre valeur dans Expression.Not ou Expression.IsFalse().

Par exemple:

Expression.AndAlso(Expression.Not(allCkParam), ...) 
+0

En question côté, s'il vous plaît voir le modifier. – Richard77

+1

@ Richard77 S'il vous plaît ouvrir une nouvelle question, plutôt que d'ajouter des questions. Rappelles toi; Le SO est principalement utilisé pour aider les futurs visiteurs; où les questions générales sont facilement consultables – Rob

+0

Cela fait depuis. Je vous remercie. – Richard77