查找集合中一组项目的最后一项?

时间:2014-11-19 05:50:54

标签: c# linq collections

我收到的所有项目都带有一个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

我可以通过逐个循环遍历每个键来获得这个,但似乎必须有一个更清洁的方式。

3 个答案:

答案 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 };