2

日付/時刻を含むテーブルがあり、最小の日付で行全体を検索したいと考えています。次の例を参照してください。

ID     First     Last     ADateTime             Processed
1      Joe       Smith    09/06/2013 04:00 AM   True
1      Joe       Smith    09/06/2013 02:00 AM   False
2      Jack      Jones            
3      John      Jack     09/05/2013 06:00 AM   True
3      John      Jack     09/26/2013 02:00 AM   False

クエリから欲しいのは、次のものを取得することです。

ID     First     Last     ADateTime             Processed
1      Joe       Smith    09/06/2013 02:00 AM   False
2      Jack      Jones            
3      John      Jack     09/05/2013 06:00 AM   True

近いLINQステートメントがあります:

        var uniqueGuys = from d in tests.AsEnumerable()
                         group d by d.ID into g
                         let f = g.FirstOrDefault()
                         where f != null
                         select new
                         {
                             f.ID,
                             f.First,
                             f.Last,
                             ADateTime = g.Min(c => c.DateTime),
                             f.Processed
                         };

これにより、最小日付を持つ 3 つの ID のそれぞれが正しく得られますが、残りの情報は正しくありません。たとえば、ID 1 の場合、Joe Smith の日付は 201/09/06 2:00 AM であり、これは正しいのですが、その行に関連付けられている false ではなく True として処理されたと表示されます。最小の日付/時刻を取得しているように見えますが、他のものを見つけることができる最初のレコードを取得しています。最小の ADateTime で完全な行を取得する方法はありますか?

4

1 に答える 1

6

orderby を実行してから、最初のものを選択できます。

次のように:

var uniqueGuys = from d in from d in tests.AsEnumerable()
                 group d by d.ID into g
                 select g.OrderBy(p => p.DateTime).First(); 
于 2013-08-26T19:14:13.240 に答える