2

私はあらゆる方法を試し、あらゆる場所を調べました。これは本当にばかげているので、私はイライラしています。各グループのマックスが欲しい。以下の記録があります。

ID  Custno  paydt                    rcvDt                  Mon    Tue
17  106505  2009-12-31 00:00:00.000 2012-07-11 07:15:04.523 100     3
18  106505  2009-12-31 00:00:00.000 2012-07-11 07:15:04.543 NULL    NULL
19  106505  2010-12-31 00:00:00.000 2012-07-11 07:15:04.747 3       3
20  106505  2011-12-31 00:00:00.000 2012-07-11 07:15:04.827 3       3

結果は Custno と paydt でグループ化し、最大 ID で返す必要があります

ID  Custno  paydt                    rcvDt                  Mon    Tue
18  106505  2009-12-31 00:00:00.000 2012-07-11 07:15:04.543 NULL    NULL
19  106505  2010-12-31 00:00:00.000 2012-07-11 07:15:04.747 3   3
20  106505  2011-12-31 00:00:00.000 2012-07-11 07:15:04.827 3   3

別の方法を試しましたが、そのうちの1つが以下です

var q = from x in MyTable.ToList()
                        group x by new { x.custno, x.paydt } into g
                        select new MyTable
                        {
                            custno= g.Key.custno,
                            paydt= g.Key.paydt,
                            ID = g.Max(b => b.ID),
                            rcvDt = g.OrderByDescending(a => a.ID).First().rcvDt ,
                            mon = g.OrderByDescending(a => a.ID).First().mon,
                            tue = g.OrderByDescending(a => a.ID).First().tue
                        };

助けていただければ幸いです!

4

3 に答える 3

3

以下を使用できます。

var q = MyTable.GroupBy(x => new {x.custno, x.paydt})
               .Select(g => g.OrderByDescending(i => i.ID).First());

これは、同じロジックを使用してグループ化します。使用していたのと同じグループ化を実行しますが、ID の降順でグループを並べ替えた後、各グループ内から最初のレコードを選択します。

于 2012-07-13T17:37:16.163 に答える
2

試す

var q = MyTable.GroupBy(x => new { x.custno, x.paydt }).Max(y=> y.Max(z => z.ID));

動作するはずです。

于 2012-07-13T18:43:13.163 に答える
0

単一のクエリで実行できるかどうかはわかりませんが、常に2つのステップで実行できます。

    var maxIds = MyTable.GroupBy(x => new {x.custno, x.paydt}).Select(g => g.Max(i => i.ID));
    var result = MyTable.Where(x => maxIds.Contains(x.ID));
于 2012-07-13T19:12:31.193 に答える