我有一个对象列表,该对象包含一个日期时间。
我想使用LINQ来排除具有最新日期时间的对象。
我尝试过类似的事情:
var excludedList = testdata.Except(testdata.Max(c => c.registeredAt).FirstOrDefault()).ToList();
但它不起作用,正确的linq应该是什么?
答案 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);
这保留了原始订单。