удалить из списка с помощью Linq - PullRequest
2 голосов
/ 09 июня 2011

Итак, у меня есть список объектов класса A, который содержит List объектов класса B

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

и у меня есть списки:

List<A> mainList;
List<B> listForRemoval;

Как я могу, используя Linq, "очистить" mainList, удалив все объекты из bs (для каждого A в mainList), который существует в listForRemoval?

Надеюсь, я не перепутал вас с этим вопросом.:)

Ответы [ 4 ]

4 голосов
/ 09 июня 2011

Да, это возможно, как показали другие ответы.Однако я бы выбрал следующее решение, которое вообще не использует LINQ:

foreach (var a in mainList) {
    a.bs.RemoveAll(b => listForRemoval.Contains(b));
}

Преимущества:

  • Проще читать и понимать.
  • Он не длиннее решений на основе LINQ - на самом деле он на короче , чем принятый ответ на основе LINQ.
  • Он удаляет элементы из bsвместо присвоения нового списка bs.Это может привести к повышению производительности и / или необходимости, если список используется и в других местах.
4 голосов
/ 09 июня 2011

Сам linq, вероятно, не очень подходит, но вы можете использовать некоторые из его методов расширения.Linq обычно предназначен для выбора, а не для обработки.

mainList.ForEach(x=>x.bs = x.bs.Where(y=>!listForRemoval.Contains(y)).ToList());
2 голосов
/ 09 июня 2011
mainList.ForEach(a => a.bs.RemoveAll(b => listForRemoval.Contains(b)));
2 голосов
/ 09 июня 2011
foreach (var list in mainList) {
    list.bs = list.bs.Where(b => !listForRemoval.Contains(b)).ToList();
}
...