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.