使用LINQ从列表中删除元素<T>

使用LINQ从列表中删除元素<T>

假设我有LINQ查询,例如:

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

鉴于authorsList是类型的List<Author>,如何删除Author来自authorsList中的查询返回的authors?

或者,换句话说,我如何删除所有的名字等于Bob从authorsList?

注:为问题的目的,这是一个简化的例子。


慕慕森
浏览 2334回答 3
3回答

海绵宝宝撒

那么,从一开始就更容易将它们排除在外:authorsList&nbsp;=&nbsp;authorsList.Where(x&nbsp;=>&nbsp;x.FirstName&nbsp;!=&nbsp;"Bob").ToList();但是,这只会改变authorsList而不是从以前的集合中移除作者。或者,您可以使用RemoveAll:authorsList.RemoveAll(x&nbsp;=>&nbsp;x.FirstName&nbsp;==&nbsp;"Bob");如果您确实需要基于另一个集合执行此操作,我将使用HashSet,RemoveAll并包含:var&nbsp;setToRemove&nbsp;=&nbsp;new&nbsp;HashSet<Author>(authors);authorsList.RemoveAll(x&nbsp;=>&nbsp;setToRemove.Contains(x));

泛舟湖上清波郎朗

如果您确实需要删除项,那么除了()之外,其他内容如何?您可以根据新列表进行删除,也可以通过嵌套Linq来动态删除.var&nbsp;authorsList&nbsp;=&nbsp;new&nbsp;List<Author>(){ &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Author{&nbsp;Firstname&nbsp;=&nbsp;"Bob",&nbsp;Lastname&nbsp;=&nbsp;"Smith"&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Author{&nbsp;Firstname&nbsp;=&nbsp;"Fred",&nbsp;Lastname&nbsp;=&nbsp;"Jones"&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Author{&nbsp;Firstname&nbsp;=&nbsp;"Brian",&nbsp;Lastname&nbsp;=&nbsp;"Brains"&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Author{&nbsp;Firstname&nbsp;=&nbsp;"Billy",&nbsp;Lastname&nbsp;=&nbsp;"TheKid"&nbsp;}}; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;authors&nbsp;=&nbsp;authorsList.Where(a&nbsp;=>&nbsp;a.Firstname&nbsp;==&nbsp;"Bob"); &nbsp;&nbsp;&nbsp;&nbsp;authorsList&nbsp;=&nbsp;authorsList.Except(authors).ToList(); &nbsp;&nbsp;&nbsp;&nbsp;authorsList&nbsp;=&nbsp;authorsList.Except(authorsList.Where(a=>a.Firstname=="Billy")).ToList();
打开App,查看更多内容
随时随地看视频慕课网APP