web-dev-qa-db-fra.com

À l'aide de LINQ, sélectionnez une liste d'objets dans une autre liste d'objets

public class ClassA
{
     public string MyString {get; set;}
}

public class ClassB
{
     public List<ClassA> MyObjects {get; set;}
}

List<ClassB> classBList = new List<ClassB>();
var results = (from i in classBList select i.MyObjects).Distinct();

Je veux une liste distincte de tous les objets ClassA dans le classBList. Comment procéder à l'aide de LINQ ? Je pense à une requête imbriquée, mais je ne pouvais pas vraiment la comprendre. Toute aide est très appréciée.

40
Tom

Vous essayez de sélectionner plusieurs objets de résultat pour chaque objet ClassB dans la liste d'origine.

Par conséquent, vous recherchez la méthode d'extension SelectMany :

var results = classBList.SelectMany(b => b.MyObjects).Distinct();

Si vous souhaitez utiliser des expressions de requête, vous devrez utiliser deux clauses from :

var results = (from b in classBList from a in b.MyObjects select a).Distinct();
86
SLaks

Vous souhaitez utiliser IEnumerable.SelectMany() Méthode d'extension pour aplatir la hiérarchie:

var result = classBList.SelectMany(b => b.MyObjects).Distinct();
15
Justin Niessner