LINQ从组中选择具有最大日期的列

时间:2017-10-19 03:43:10

标签: c# .net linq

我有下表,其中我可以为一个名称设置多个时间戳。 我希望获得带有最大时间戳的名称(不同)。

Id  Name    TimeStamp
66  Name1   19/10/2017
67  Name1   20/10/2017
68  Name1   21/10/2017
69  Name2   19/10/2017
70  Name2   20/10/2017
71  Name2   21/10/2017
72  Name2   22/10/2017
73  Name3   19/10/2017
74  Name3   20/10/2017
75  Name3   21/10/2017

我可以进行分组,现在需要从该组中选择具有最大值的元素。

 var tempResult = data.GroupBy(x => x.Name);

我试过这样做,坚果只选择了日期时间,但我需要完整的项目:

foreach (var item in tempResult)
            {
                var maxItem = item.Max(x=>x.StartTime);

            }

2 个答案:

答案 0 :(得分:5)

var result = from d in data
    group d by d.Name into g
    select new { Name = g.Key, MaxDate = g.Max(s => s.StartTime) }

或者,如果您不喜欢查询语法,那么:

data.GroupBy(i => i.Name).Select(g => new
{
    Name = g.Key,
    MaxDate = g.Max(row => row.StartTime)
});

答案 1 :(得分:2)

如果你只需要Name和TimeStamp,那么@ CodingYoshi的答案就足够了。 如果要选择所有其他属性(完整对象),可以使用它。

    var tempResult = data.GroupBy(x => x.Name)
        .Select(g => g.OrderByDescending(y => y.TimeStamp).FirstOrDefault());

如果您喜欢查询表单,那么

    var tempResult2 = from x in data
                      group x by x.Name into g
                      select g.OrderByDescending(y => y.TimeStamp).FirstOrDefault();

在您的情况下,您可以访问所有属性(包括ID)。