2016-06-16 72 views
0

我有一個對象列表,該對象包含一個日期時間。LINQ列表排除具有最新日期時間的項目

我想使用LINQ排除具有最新日期時間的對象。

我想是這樣的:

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

但它不能正常工作,應該怎樣正確的LINQ是什麼?

+0

如果有多個具有相同的最新日期時間會怎樣? –

+0

這是不可能的 –

回答

2

你可以嘗試這樣的事:

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

這將會按日期排序列表,然後跳過第一個項目。

+0

這將修改未被請求的訂單 –

+0

如果* *兩條*記錄具有相同的(*最大*)'registeredAt',該怎麼辦?在這種情況下,你必須調用'.skip(2)'? –

+0

@DmitryBychenko:OP說這是不可能的 – Baldrick

0

這是一個可行的方法,如果重複registeredAt日期時間是不可能的:

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

這使原來的順序。

1

下面是一個解決方案,它不執行僅僅提取單個最大值的整個排序,並保留序列的順序。它仍然取決於最大值是唯一的。

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