IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

équivalent d'un "select .. in" en Linq c# ?


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut équivalent d'un "select .. in" en Linq c# ?
    Bonjour,
    Je cherche à savoir comment écrire mon bout de code "x.technicalAttribute in (toutes les valeurs du membre technicalAttribute de TAPricingCategory de ma liste tapcs)" ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<TAPricingCategory> taPricingCategorys = FillAllPossiblePricingCategorys();
    List<TARateAdjustment> taRateAdjustments = FillAllPossibleRateAdjustments();
    List<TAPricingCategory> tapcs = taPricingCategorys.Where(x => x.model == "toto").ToList();
    List<TARateAdjustment> taras = taRateAdjustments.Where(x => x.model == "toto" && x.technicalAttribute in (toutes les valeurs du membre technicalAttribute de TAPricingCategory de ma liste tapcs) ).ToList();
    J'imagine bien (j'espère bien..) que c'est possible mais je cale, quelqu'un sait-il le faire s'il vous plaît ?

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Ces méthodes retournent des booléens et pas des listes. Je ne vois pas commetn cela peut s'appliquer à mon cas du coup.
    De plus, quand je regarde des exemples sur le net, je vois tout le temps des retours anonymous (en syntax query), or moi j'ai besoin de récupérer une liste du type TARateAdjustment et je ne vois pas comment faire ça. Je suis en train de voir avec Join, mais je n'ai pas trouvé la solution.

  4. #4
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Where prend un Func<T, bool> donc ta lambda à l'intérieur DOIT retourner un bool
    les 2 opérandes d'un && doivent être de type bool également ; donc ton "technicalAttribute in ..." DOIT renvoyer un bool

    De 2 choses l'une soit ; comme je l'ai bien compris tu cherches à filtrer taRateAdjustments pour ne garder que ceux dont le model est "toto" et le technicalAttribute est dans (les technicalAttribute de) tapcs, auquel cas ma réponse précédente est bien correcte ; soit il te faut mieux expliciter ce que tu souhaites faire (avec des mots, pas du "pseudo code") et il te faudra, a priori, plus qu'un Where.
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Tu as effectivement bien compris ce que je cherchais à faire.
    J'ai trouvé une solution avec Join mais qui ne me plaît pas sachant que je dois répliquer cette logique dans beaucoup d'endroits.
    C'est en faisant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<TARateAdjustment> taras = taRateAdjustments.Where(x => x.model == "toto").ToList();
    List<TARateAdjustment> tarasFILTERED = taras.Join(tapcs, x => x.technicalAttribute, y => y.technicalAttribute, (x, y) => new TARateAdjustment(x.model, x.technicalAttribute)).ToList();
    En effet, cela se fait en 2 temps pour être un minimum lisible et en plus ça me force à rajouter un constructeur non vide pour TARateAdjustment.
    Quand je regarde à ce que tu proposes, je comprends que je devrais avoir quelque chose comme ça, c'est bien ça? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<TARateAdjustment> taras = excelData.taRateAdjustments.Where(x => x.model == "toto" && tapcs.Any(y=> y.technicalAttribute == x.technicalAttribute)).ToList();
    Si j'utilise Contains, je dois avoir avoir un nouveau constructeur de TAPricingCategory, car ça prend un object entier et non juste un prédicat (clause where quoi).
    Y a-t-il moyen de visualiser la requête qui est générée bien qu'il y est des expressions lambda ?
    Merci.

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo