获取LINQ中组的第一条记录?

简介:如何获得有序数据组中的前1个元素

我试图通过CarId字段进行分组,然后在每个组中,我想对DateTimeStamp字段降序进行排序。 所需数据将为每辆车提供最新的DateTimeStamp,并且只有该组中的1。

我可以达到这一点,但是在通过DateTimeStamp desc排除组中的前1名和排序组时遇到问题。

这是第一组操作后的内容

group 1 ------------------------ CarId DateTimeStamp 1 1/1/2010 1 1/3/2010 1 3/4/2010 group 2 ------------------------ CarId DateTimeStamp 2 10/1/2009 2 1/3/2010 2 9/4/2010 

我希望只有有序组中的前1名

  group 1 ------------------------ CarId DateTimeStamp 1 3/4/2010 group 2 ------------------------ CarId DateTimeStamp 2 9/4/2010 

Brickwall:我停止的地方,需要group by子句中的CarId和DateTimeStamp,以便稍后按DateTimeStamp排序。 也许日期的排序应该在一个单独的函数中完成,不确定。

 data .GroupBy( x => x.CardId, (x, y) => new { Key = x, Value = y.OrderByDescending(z => z.DateTimeStamp).FirstOrDefault() } ); 

这将按CardId所有元素进行CardId ,然后按DateTimeStamp (降序)对每个组的元素进行CardId ,然后将每个组削减为仅包含第一个元素。 最后,它返回一个可枚举的“组”(带有惊吓引号,因为它们实际上是一个匿名类型而不是IGrouping ),其中每个组都有您正在寻找的一个项目。

我发现自己更容易理解查询表达式语法:

 from x in data group x by x.CarId into grp select new { CarId = x.CarId, Record = (from x in grp orderby z.DateTimeStamp descending).FirstOrDefault() }; 

试试这个?

  var latest = Group1.OrderByDescending(x=>x.DateTimeStamp).FirstOrDefault();