如何删除与条件匹配的所有列表行

本文关键字:列表 条件 何删除 删除 | 更新日期: 2023-09-27 18:03:41

我试图删除匹配where条件的List<T>中的所有记录。我在linq中发现的是RemoveAll()方法,但它似乎只能通过删除与条件匹配的属性而不是列表中的complete row来工作。

所以我确实尝试删除所有建议在这里与一个Where子句,导致"argument null exception".

问题:

如何使用linq删除所有匹配条件的列表行?

//Sort the list by the UpdatedTime time descending
//Remove all records in list that are older than today's date and status equal to BB. Then order the remaining records desc.
var cuttOff = DateTime.UtcNow.AddDays(-10);
List<Escalation> escHistorySorted = escHistory.RemoveAll.Where(x => x.UpdatedTime  <= cuttOff && x.status == "BB").OrderByDescending(d => d.UpdatedTime).ToList();

如何删除与条件匹配的所有列表行

看起来你一次做的事情太多了。

首先删除记录(将谓词从where子句直接移动到RemoveAll中),然后对它们进行排序。

var cuttOff = DateTime.UtcNow.AddDays(-10);
escHistory.RemoveAll(x => x.UpdatedTime <= cuttOff && x.status == "BB");
List<Escalation> escHistorySorted = escHistory.OrderByDescending(d => d.UpdatedTime).ToList();

RemoveAll的返回值是一个整数,表示删除的记录数,因此您不能简单地对调用该方法的结果进行排序。