2017-06-21 41 views
0

選擇最新的,不同的項目我有對象,每個看起來像這樣的列表:與LINQ

public class Item 
{ 
    public string Id { get; set; } 
    public DateTime Timestamp { get; set; } 
    public string Status { get; set; } 
} 

在我的名單,同樣標識可能出現反覆,但具有不同的時間戳和狀態值。因此,一個例子列表(JSON對象)可能是這樣的:

[ 
    { 
    "Id": "123", 
    "Timestamp": "2017-06-21T08:00:00.000Z", 
    "Status": "Ordered" 
    }, 
    { 
    "Id": "789", 
    "Timestamp": "2017-06-20T09:00:00.000Z", 
    "Status": "Ordered" 
    }, 
    { 
    "Id": "123", 
    "Timestamp": "2017-06-20T10:00:00.000Z", 
    "Status": "Dispatched" 
    }, 
] 

注意項「123」出現兩次 - 下令在上午8點,上午10時出動。

有沒有一種方法可以使用LINQ從該列表中刪除重複項(由Id),因此我們只剩下每個Id的最新項目(通過Timestamp)?換句話說,我只想包含了每個項目的最新狀態列表:

[ 
    { 
    "Id": "789", 
    "Timestamp": "2017-06-20T09:00:00.000Z", 
    "Status": "Ordered" 
    }, 
    { 
    "Id": "123", 
    "Timestamp": "2017-06-20T10:00:00.000Z", 
    "Status": "Dispatched" 
    }, 
] 
+2

請出示您已經嘗試了什麼 –

回答

5

嘗試通過IdGroupByTimeStamp各組進行排序:

IEnumerable<Item> source = ... 

var result = source 
    .GroupBy(item => item.Id) 
    .Select(chunk => chunk 
    .OrderByDescending(item => item.TimeStamp) 
    .First()) 
    .ToArray(); // if you want materialization