Używając LINQ, wybierz listę obiektów wewnątrz innej listy obiektów

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();

Chcę mieć odrębną listę wszystkich ClassA obiektów w classBList. Jak to zrobić używając LINQ ? Myślę o zagnieżdżonym zapytaniu, ale nie mogłem tego rozgryźć. Każda pomoc jest bardzo doceniana.

Author: Tatranskymedved, 2010-10-14

2 answers

Próbujesz wybrać wiele obiektów wynikowych dla każdego obiektu ClassB z oryginalnej listy.

Dlatego szukasz SelectMany metoda rozszerzenia :

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

Jeśli chcesz używać wyrażeń zapytań, musisz użyć dwóch from klauzul :

var results = (from b in classBList from a in b.MyObjects select a).Distinct();
 78
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-14 15:02:23

Chcesz użyć IEnumerable.SelectMany() metoda rozszerzenia do spłaszczenia hierarchii:

var result = classBList.SelectMany(b => b.MyObjects).Distinct();
 12
Author: Justin Niessner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-14 15:02:31