获取具有最新值的对象列表

时间:2014-06-22 10:15:02

标签: c# list

我有product个对象的列表

List<Product> products = new 
List<Product>() 
{
        new Product{ Name= "A", Code =1, TimeStamp= DateTime.Parse("26/06/2014 8:01") },
        new Product{ Name= "B", Code =2, TimeStamp= DateTime.Parse("26/06/2014 8:02") },
        new Product{ Name= "A", Code =1, TimeStamp= DateTime.Parse("26/06/2014 8:04") },
        new Product{ Name= "C", Code =5, TimeStamp= DateTime.Parse("26/06/2014 8:07") }
};

我想获得具有最新Time值的产品列表,因此预期输出为 -

Distinct Products
Name Code TimeStamp
A     1     8:04
B     2     8:02
C     5     8:07

我试过.GroupBy()但没有工作,任何想法?

2 个答案:

答案 0 :(得分:9)

使用GroupBy是正确的方法 - 订购您的论坛,并采取第一项,如下所示:

var res = products
    .GroupBy(p => p.Name)
    .Select(g => g.OrderByDescending(p => p. TimeStamp).First())
    .ToList();

我们的想法是按时间戳按降序对每个组进行排序,然后从排序的子列表中获取第一个项目。

答案 1 :(得分:0)

作为替代方案,您可以使用MoreLINQDistinctBy

var res = products
    .DistinctBy(p => p.Name)
    .OrderBy(p => p.TimeStamp)
    .ToList();