2017-10-19 10 views
0

私は単一の名前に対して複数のタイムスタンプを持つことができる次の表を持っています。 最大タイムスタンプで名前(別名)を取得したいと思います。グループから最大日付の列を選択するLINQ

Id Name TimeStamp 
66 Name1 19/10/2017 
67 Name1 20/10/2017 
68 Name1 21/10/2017 
69 Name2 19/10/2017 
70 Name2 20/10/2017 
71 Name2 21/10/2017 
72 Name2 22/10/2017 
73 Name3 19/10/2017 
74 Name3 20/10/2017 
75 Name3 21/10/2017 

私はグループを実行することができました。そのグループから最大値を持つ要素を選択する必要があります。

var tempResult = data.GroupBy(x => x.Name); 

私はこれをやってみました、ナットそれだけで日時を選択したが、私は完全なアイテムが必要です。

foreach (var item in tempResult) 
      { 
       var maxItem = item.Max(x=>x.StartTime); 

      } 

答えて

3
var result = from d in data 
    group d by d.Name into g 
    select new { Name = g.Key, MaxDate = g.Max(s => s.StartTime) } 

それとも、その後、クエリ構文を好きではない場合:

data.GroupBy(i => i.Name).Select(g => new 
{ 
    Name = g.Key, 
    MaxDate = g.Max(row => row.StartTime) 
}); 
+1

見た目はきれいで清潔です –

1

@CodingYoshiの答えは、NameとTimeStampだけで十分です。 他のすべてのプロパティ(フルオブジェクト)を選択する場合は、これを使用できます。

var tempResult = data.GroupBy(x => x.Name) 
     .Select(g => g.OrderByDescending(y => y.TimeStamp).FirstOrDefault()); 

あなた、この

var tempResult2 = from x in data 
         group x by x.Name into g 
         select g.OrderByDescending(y => y.TimeStamp).FirstOrDefault(); 

問い合わせフォームのような場合は、ここにあなたのケースでは、あなたが(IDを含む)すべてのプロパティにアクセスすることができます。

関連する問題