Bonjour,
J'ai un problème pour exprimer quelque chose en LINQ.
Je dois écrire un filtre pour une requête.
J'utilise un système permettant de rajouter un filtre pour la requête grâce à une méthode qui prend en paramètre une expression lambda.
La méthode permettant d'ajouter un filtre s'appelle "AndFilter".
Voici sa signature :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 /// <summary> /// Méthode permettant d'ajouter un filtre AND sur le prédicat en cours /// </summary> /// <param name="filter"></param> public void AndFilter(Expression<Func<T, bool>> filter) { this._predicate = this._predicate.And(filter); _isPredicateInInitialState = false; }
On a une table ARTICLES contenant des articles.
=> ID_ARTICLES (clé primaire)
=> ...
On a une table ARTICLES_SELLING_PRICE contenant le prix des articles.
=> ID ARTICLES (clé primaire : part1)
=> ID_BB_COUNTRIES (clé primaire : part2)
=> SELLING_PRICE
=> ...
L'utilisateur arrive sur un écran où il peut choisir des filtres à mettre dans une requête qui sélectionne des articles dans la table ARTICLES.
Mon but est de rajouter un filtre visibilite prix FR : Oui ou Non.
L'utilisateur coche Oui ou Non via un bouton radio, puis coche un bouton "Ajouter le filtre".
Mon problème est que je n'arrive pas à retranscrire le filtre Visibilité prix FR => Non, avec le système de le faire en expression lambda dans la méthode AndFilter.
J'ai réussi à faire le filtre Visibilité FR => Oui.
Cela donne ceci :
Pour ce filtre Visibilité FR => Oui :
il faut sélectionner les articles dans la table ARTICLES,
dont les ID_ARTICLES apparaissent dans la table ARTICLES_SELLING_PRICE.
Dans la table ARTICLES_SELLING_PRICE, on a filtré pour ne garder que les enregistrement correspondant à la France (artSel.ID_BB_COUNTRIES == 14).
Filtre Visibilité FR => OUI :
Code : Sélectionner tout - Visualiser dans une fenêtre à part a_populatePredicate.AndFilter(article => article.ARTICLES_SELLING_PRICES.Any(artSel => artSel.ID_ARTICLES == article.ID_ARTICLES && artSel.ID_BB_COUNTRIES == 14));
Pour le filtre Visibilité FR => NON (celui que je n'arrive à faire)
Il faut que je sélectionne les articles dans la table ARTICLES dont les ID n'apparaissent pas dans la table ARTICLES_SELLING_PRICE.
La table ARTICLE_SELLING_PRICE est bien sur filtrée pour n'avoir que les enregistrements correspondant à la France.
Voilà comment exprimer ça dans ma lambda expression ?
J'ai pensé au à la négation d'un Contains, ou à faire un Except, mais j'arrive pas à l'écrire..
Merci de votre aide.
Partager