Использование LINQ для удаления элементов из списка <T> - PullRequest
604 голосов
/ 12 мая 2009

Скажите, что у меня есть запрос LINQ, такой как:

var authors = from x in authorsList
              where x.firstname == "Bob"
              select x;

Учитывая, что authorsList имеет тип List<Author>, как я могу удалить элементы Author из authorsList, которые возвращаются запросом в authors?

Или, другими словами, как я могу удалить всех равных Бобу из authorsList?

Примечание. Это упрощенный пример для целей вопроса.

Ответы [ 15 ]

4 голосов
/ 25 августа 2016

Ниже приведен пример удаления элемента из списка.

 List<int> items = new List<int>() { 2, 2, 3, 4, 2, 7, 3,3,3};

 var result = items.Remove(2);//Remove the first ocurence of matched elements and returns boolean value
 var result1 = items.RemoveAll(lst => lst == 3);// Remove all the matched elements and returns count of removed element
 items.RemoveAt(3);//Removes the elements at the specified index
0 голосов
/ 15 июня 2018

Для обеспечения свободного хода кода (если оптимизация кода не имеет решающего значения), и вам потребуется выполнить некоторые дополнительные операции со списком:

authorsList = authorsList.Where(x => x.FirstName != "Bob").<do_some_further_Linq>;

или

authorsList = authorsList.Where(x => !setToRemove.Contains(x)).<do_some_further_Linq>;
0 голосов
/ 24 февраля 2016

Очень просто:

authorsList.RemoveAll((x) => x.firstname == "Bob");
0 голосов
/ 28 января 2016

Я думаю, вам нужно просто назначить элементы из списка авторов в новый список, чтобы применить этот эффект.

//assume oldAuthor is the old list
Author newAuthorList = (select x from oldAuthor where x.firstname!="Bob" select x).ToList();
oldAuthor = newAuthorList;
newAuthorList = null;
0 голосов
/ 12 мая 2009

LINQ берет свое начало в функциональном программировании, которое подчеркивает неизменность объектов, поэтому не предоставляет встроенного способа обновления исходного списка на месте.

Примечание об неизменности (взято из другого ответа SO):

Вот определение неизменяемости из Википедии (ссылка)

"В объектно-ориентированном и функциональном программировании неизменный объект - это объект, состояние которого нельзя изменить после его создания."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...