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
En question côté, s'il vous plaît voir le modifier. – Richard77
@ 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
Cela fait depuis. Je vous remercie. – Richard77