List<MyType>
を持っている場合は
、コレクション内の項目を表す各ラインで:Linqを使ってシーケンスのサブシーケンスにフィルタを適用する
{{ Id = 1, Year = 2010 },
{ Id = 1, Year = 2009 },
{ Id = 1, Year = 2008 },
{ Id = 2, Year = 2010 },
{ Id = 2, Year = 2009 },
{ Id = 2, Year = 2008 }}
私はIDごとに最新の項目のこのコレクションからコレクションを取得したいです。この外観のLinqはどのようなものでしょうか?
所望の出力:
{{ Id = 1, Year = 2010 },
{ Id = 2, Year = 2010 }}
私は2番目のリスト変数とforeachループを使用してnaiive実装を持っているが、それは非効率的です。
//naiive implementation "p-code"
//...
var mostRecentItems = new List<MyType>();
var ids = collection.Select(i => i.Id).Distinct();
foreach(var id in ids)
{
mostRecentItems.Add(collection.Where(i => i.Id == id).OrderByDescending().First);
}
return mostRecentItems;
+1これが正しいものです。 –
ありがとうございます。 TBH、私はGroupByの周りに頭を上げていません。誰かが簡単な説明をオンラインで知っていれば投稿してください。 – Ben
ああ、まあ、もう一度打つ。 – tvanfosson