собрать все элементы массива из каждого объекта - PullRequest
0 голосов
/ 24 августа 2011

У меня есть 2 объекта:

class A {
    ...
}
class B {
    IEnumerable<B> bs;
}

У меня есть массив A, и мне нужно получить все B в одном IEnumerable.Я могу сделать:

IEnumerable<A> as=....;

IEnumerable<IEnumerable<B>> bss=as.Select(x=>x.bs);

IEnumerable<B> all=null;
foreach (IEnumerable<B> bs is bss) {
    if (all==null) { all=bs; }
    else { all=all.Contact(bs); }
}

Я хочу знать, есть ли более короткий способ сделать это.

Спасибо

Ответы [ 4 ]

3 голосов
/ 24 августа 2011

Вы можете использовать SelectMany, которая объединит все IEnumerables вместе

var all = as.SelectMany(a => a.bs);
0 голосов
/ 24 августа 2011

Вы хотите, чтобы SelectMany сгладил B?

IEnumerable<B> allBs = as.SelectMany(a => a.bs);

или используя выражения LINQ:

IEnumerable<B> allBs = from a in as
                       from b in a.bs
                       select b;
0 голосов
/ 24 августа 2011

Использование SelectMany:

foreach (var b in allAs.SelectMany(a => a.Bs))
{
    // Do work here
}
0 голосов
/ 24 августа 2011

Используйте метод SelectMany для выравнивания одного уровня вложенности:

all = as.SelectMany(a => a.bs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...