8
votes

LINQ Sélectionnez un sous-ensemble de la liste principale

J'ai une liste maîtresse d'objets complexes.

J'ai une liste d'ID INT que je dois sélectionner l'objet complexe correspondant hors de la liste principale. P>

Cela ne fonctionne pas p>

MasterListofComplexObj.Where(u => MasterListofComplexObj.Select(i => i.Id).Contains(ChildListofIntIds));


1 commentaires

Avez-vous une erreur? Ou de mauvais résultats? Pourriez-vous donner des valeurs d'entrée et la sortie que vous attendez?


3 Réponses :


23
votes

Cela devrait fonctionner:

var results = MasterListofComplexObj.Where(u => ChildListofIntIds.Contains(u.Id));


2 commentaires

Vous êtes dans .... Merci pour l'aide. Dans mon esprit, la logique est un peu inversée, vous prenez la liste des enfants et voyez s'il contient l'ID de votre choix dans la liste des mât. Merci encore


Oui, la syntaxe n'est pas ce que vous attendez intuitivement - mais puisque vous envisagez chaque complexobj un par un, il a un sens



1
votes
var results = from obj in MasterListofComplexObj
    where ChildListofIntIds.Contains(obj.Id)
    select obj;
This is an IEnumerable.  You may want to .FirstOrDefault() it to get one object. Translates to 
MasterListofComplexObj.Where(item => ChildListofIntIds.Contains(item.Id))No select necessary if you want the object itself and not one of its properties.

0 commentaires

1
votes

L'autre chose plus générale à examiner serait rejoindre:

var results = MasterList.Join(ChildList, (m => m.Id), (c => c), ((m,c) => m));


0 commentaires