一尘不染

使用LINQ从列表中删除元素

c#

假设我有LINQ查询,例如:

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

给定authorsList类型List<Author>,如何删除查询返回的Author元素?authorsList``authors

或者,换一种说法,我如何从中删除所有等价的Bob authorsList

注意:这是出于问题目的的简化示例。


阅读 417

收藏
2020-05-19

共1个答案

一尘不染

好吧,首先将它们排除会更容易:

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

但是,这只会更改的值,authorsList而不是从先前的集合中删除作者。另外,您可以使用RemoveAll

authorsList.RemoveAll(x => x.FirstName == "Bob");

如果您确实需要根据其他集合进行操作,则可以使用HashSet,RemoveAll和Contains:

var setToRemove = new HashSet<Author>(authors);
authorsList.RemoveAll(x => setToRemove.Contains(x));
2020-05-19