为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2019-07-09 18:07:04
使用LINQ从列表中删除元素<T>假设我有LINQ查询,例如:var authors = from x in authorsList              where x.firstname == "Bob"               select x;鉴于authorsList是类型的List<Author>,如何删除Author来自authorsList中的查询返回的authors?或者,换句话说,我如何删除所有的名字等于Bob从authorsList?注:为问题的目的,这是一个简化的例子。
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

那么,从一开始就更容易将它们排除在外:

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

但是,这只会改变authorsList而不是从以前的集合中移除作者。或者,您可以使用RemoveAll:

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

如果您确实需要基于另一个集合执行此操作,我将使用HashSet,RemoveAll并包含:

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


查看完整回答
反对 回复 2019-07-09
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

如果您确实需要删除项,那么除了()之外,其他内容如何?
您可以根据新列表进行删除,也可以通过嵌套Linq来动态删除.

var authorsList = new List<Author>(){
    new Author{ Firstname = "Bob", Lastname = "Smith" },
    new Author{ Firstname = "Fred", Lastname = "Jones" },
    new Author{ Firstname = "Brian", Lastname = "Brains" },
    new Author{ Firstname = "Billy", Lastname = "TheKid" }};
    var authors = authorsList.Where(a => a.Firstname == "Bob");
    authorsList = authorsList.Except(authors).ToList();
    authorsList = authorsList.Except(authorsList.Where(a=>a.Firstname=="Billy")).ToList();



查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 2333 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信