C# 每组的最大LINQ

C# 每组的最大LINQ,c#,linq-to-entities,C#,Linq To Entities,我试过了所有可能的方法,到处都查过了。我很沮丧,因为这真的很愚蠢。我想要每组的max。我有以下记录 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

我试过了所有可能的方法,到处都查过了。我很沮丧,因为这真的很愚蠢。我想要每组的max。我有以下记录

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分组,并返回max 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
尝试了不同的方法,其中一个在下面

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
                        };
非常感谢您的帮助

您可以使用:

var q = MyTable.GroupBy(x => new {x.custno, x.paydt})
               .Select(g => g.OrderByDescending(i => i.ID).First());
这两个组使用相同的逻辑。它执行与您使用的分组相同的分组,但在按ID降序对组进行排序后,会从每个组中选择第一条记录。

试试看

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

它应该可以工作。

不确定是否可以在单个查询中完成,但您始终可以通过两个步骤完成:

    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));

你的问题看起来没有错。它返回什么?它从每个列返回max:(Mon和tue返回100和3,而不是null