LINQ列表排除具有最新日期时间的项目

时间:2016-06-16 07:39:09

标签: c# linq

我有一个对象列表,该对象包含一个日期时间。

我想使用LINQ来排除具有最新日期时间的对象。

我尝试过类似的事情:

var excludedList = testdata.Except(testdata.Max(c => c.registeredAt).FirstOrDefault()).ToList();

但它不起作用,正确的linq应该是什么?

3 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

var excludedList = testdata.OrderByDescending(i => i.registeredAt).Skip(1).ToList();

这将按日期对列表进行排序,然后跳过第一项。

答案 1 :(得分:1)

这是一个解决方案,它不执行整个排序只是为了提取单个最大值,并保留序列的顺序。它仍然取决于唯一的最大值。

var maxRegisteredAt = testdata.Max(c => c.registeredAt);
var excludedList = testdata
    .Where(c => c.registeredAt != maxRegisteredAt)
    .ToList();

答案 2 :(得分:0)

如果不可能重复registeredAt个日期时间,这是一种可能的方法:

var maxObj = testdata.OrderByDescending(x => x?.registeredAt).First();
var excludedList = testdata.FindAll(x => x != maxObj);

这保留了原始订单。