我尽一切可能,到处查找。我很沮丧,因为这真的很傻。我想从每个组中获得最大值。我有以下记录。
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
尝试了不同的方式,其中一个在
之下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
};
非常感谢帮助!
答案 0 :(得分:3)
您可以使用:
var q = MyTable.GroupBy(x => new {x.custno, x.paydt})
.Select(g => g.OrderByDescending(i => i.ID).First());
这组使用相同的逻辑。它执行您使用的相同分组,但在按ID降序对组进行排序后,从每个组中选择第一条记录。
答案 1 :(得分:2)
试
var q = MyTable.GroupBy(x => new { x.custno, x.paydt }).Max(y=> y.Max(z => z.ID));
它应该有用。
答案 2 :(得分:0)
不确定是否可以在单个查询中执行,但您始终可以分两步完成:
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));