C#, LINQ avec expression lambda : je n'arrive pas à écrire un filtre
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:
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:
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.