我有一個對象列表,該對象包含一個日期時間。LINQ列表排除具有最新日期時間的項目
我想使用LINQ排除具有最新日期時間的對象。
我想是這樣的:
var excludedList = testdata.Except(testdata.Max(c => c.registeredAt).FirstOrDefault()).ToList();
但它不能正常工作,應該怎樣正確的LINQ是什麼?
我有一個對象列表,該對象包含一個日期時間。LINQ列表排除具有最新日期時間的項目
我想使用LINQ排除具有最新日期時間的對象。
我想是這樣的:
var excludedList = testdata.Except(testdata.Max(c => c.registeredAt).FirstOrDefault()).ToList();
但它不能正常工作,應該怎樣正確的LINQ是什麼?
你可以嘗試這樣的事:
var excludedList = testdata.OrderByDescending(i => i.registeredAt).Skip(1).ToList();
這將會按日期排序列表,然後跳過第一個項目。
這將修改未被請求的訂單 –
如果* *兩條*記錄具有相同的(*最大*)'registeredAt',該怎麼辦?在這種情況下,你必須調用'.skip(2)'? –
@DmitryBychenko:OP說這是不可能的 – Baldrick
這是一個可行的方法,如果重複registeredAt
日期時間是不可能的:
var maxObj = testdata.OrderByDescending(x => x?.registeredAt).First();
var excludedList = testdata.FindAll(x => x != maxObj);
這使原來的順序。
下面是一個解決方案,它不執行僅僅提取單個最大值的整個排序,並保留序列的順序。它仍然取決於最大值是唯一的。
var maxRegisteredAt = testdata.Max(c => c.registeredAt);
var excludedList = testdata
.Where(c => c.registeredAt != maxRegisteredAt)
.ToList();
如果有多個具有相同的最新日期時間會怎樣? –
這是不可能的 –