2017-06-21 9 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」が2回表示されます - 午前10時派遣し、午前8時命じました。

LINQを使用して(Idによって)そのリストから重複を削除する方法はありますか?それで、各Idに対して最新の項目(タイムスタンプ別)が残っていますか?

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

あなたがしようとしているものをご提示ください –

答えて

5

IdGroupByを試してみて、TimeStampによって各グループを並べ替える:他の言葉では、私は、各項目の最新状態を含むリストが欲しい

IEnumerable<Item> source = ... 

var result = source 
    .GroupBy(item => item.Id) 
    .Select(chunk => chunk 
    .OrderByDescending(item => item.TimeStamp) 
    .First()) 
    .ToArray(); // if you want materialization 
関連する問題