我收到的所有项目都带有一个Key和一个“序列”号码。我试图找到每个键的“最后”序列号的项目...但序列号在“窗口”内(因为它们是基于日期的)。
示例数据
Key Seq other data.....
___ ___ _________________
ABC 4
ABC 5
ABC 6
FGH 1
FGH 2
FGH 3
FGH 4
FGH 5
FGH 6
FGH 7
FGH 8
FGH 9
FGH 10
OPQ 6
RST 3
RST 4
我会寻找结果:
ACB 6
FGH 10
OPQ 6
RST 4
我可以通过逐个循环遍历每个键来获得这个,但似乎必须有一个更清洁的方式。
答案 0 :(得分:2)
物品是否保证在原始数据中排序?
如果是这样,那么你可以这样做:
var result = items.GroupBy(item => item.Key).Select(group => group.Last());
如果它们最初可能出现故障,那么这将起作用:
var result = items.GroupBy(item => item.Key)
.Select(group => group.OrderByDescending(item => item.Seq).First());
答案 1 :(得分:0)
您可以尝试以下代码:
collection
.GroupBy(x => x.Key)
.Select(x => new { Key = x.Key, MaxSeq = x.Max(e => e.Seq));
答案 2 :(得分:0)
Linq也可以这样做: 这段代码如果你想选择最后一个
var result = from data in YourObject
group data by data.Key into item
select new { Key = item.Key, Seq = item.Last().Seq, OtherDataOjbect= item.Last().OtherDataOjbect };
如果你想选择max,请使用:
var result = from data in YourObject
group data by data.Key into item
select new { Key = item.Key, Seq = item.Max(x => x.Seq), obj = item.Single(x => x.Seq == item.Max(z => z.Seq)).obj };