как отфильтровать вложенные коллекции без ForEach? - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть сущность сказать тип A с типом свойства List of B. Тип B также имеет свойство типа List of C.

Я хочу применить фильтр к объекту A таким образом, чтобы в списке C были только объекты C, для которых их свойство Selected равно True.

Это можно сделать так:

A objA = A.ListB.ForEach(b => {b.ListC.RemoveAll(c => c.Selected == false);});

Но мне не нужно удалять все те объекты C, которые выбрали Selected = false. Я только хочу отфильтровать их.

Есть идеи?


Дополнительные пояснения: Существует объект типа A со свойством List of B. В каждом объекте B в Списке A существует свойство List of C. Объект C имеет Выбранное свойство. Теперь все, что мне нужно, - это объект A со списком B, где в каждом из списков B из C есть только те объекты C, которые имеют Selected = true. Желательный вывод - тип A. Список B не должен фильтроваться, только список C должен фильтроваться.

Ответы [ 3 ]

2 голосов
/ 23 февраля 2011

Как насчет этого:

A.ListB.Where( b => b.ListC.Exists( c => c.Selected ) )

Это то, что вы хотите?

1 голос
/ 23 февраля 2011

Если вы хотите список, содержащий все выбранные объекты C, вы можете сделать это:

List<C> selectedC = A.ListB.SelectMany( b => b.ListC.Where( c => c.Selected)).ToList();
0 голосов
/ 23 февраля 2011
var qry = from b in A.ListB
          select new {B=b,ListC=b.ListC.Where(x => x.Selected).ToList()};

обратите внимание, что это просто анонимный кортеж; мы не можем показать код для восстановления A / B и т. д. без дополнительной информации о том, как структурирован ваш код, какие есть реквизиты и т. д.

...