按UserId分组列表并获得最快的TimeSpan

时间:2016-10-11 06:58:14

标签: c# linq group-by timespan

我有一个课程,我们称之为Tasks。然后是List<Tasks>,其中包含一堆tasks。许多用户可以在此列表中包含多个tasks

public class Tasks
{
    public string UserId { get, set }

    public DateTime StartDate { get, set; }
    public DateTime EndDate { get; set; }
}

我需要最快的时间来完成taskUserId。基本上,如果UserId = 123有5个任务,我只想要最快的任务,等等所有用户。

2 个答案:

答案 0 :(得分:3)

你可以这样做:

    var list = yourPopulatedListOfTasks;
    var result = list.GroupBy(x=>x.UserId).Select(x=> new{
        UserId = x.Key,
        MaxTimeSpan = x.Min(y=>y.EndDate-y.StartDate)
    });

可能偏离主题但是: 你的命名不太好。它应该是单数的,因为您的Tasks类实际上代表一个任务。我不会使用Task作为我班级的名称,因为它是.net中知名班级的名称,这可能会引起混淆。

答案 1 :(得分:1)

这样的事情:

var result = lst.GroupBy(c => c.UserId, (key, element) => new
{
    key,
    fast = element.Min(d => d.EndDate - d.StartDate)
});