按 UserId 分组列表并获得最快的 TimeSpan
Group list by UserId and get fastest TimeSpan
我有一个 class 让我们称它为 Tasks
。然后是一个 List<Tasks>
,其中包含一堆 tasks
。许多用户可以将许多 tasks
放入此列表。
public class Tasks
{
public string UserId { get, set }
public DateTime StartDate { get, set; }
public DateTime EndDate { get; set; }
}
我需要用最快的时间完成 task
每 UserId
。基本上,如果 UserId = 123
有 5 个任务,我只想为所有用户提供最快的一个,依此类推。
像这样:
var result = lst.GroupBy(c => c.UserId, (key, element) => new
{
key,
fast = element.Min(d => d.EndDate - d.StartDate)
});
你可以这样做:
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
class 实际上代表一个任务。我不会使用 Task
作为我的 class 的名称,因为它是 .net 中众所周知的 class 的名称,这可能会引起混淆。
我有一个 class 让我们称它为 Tasks
。然后是一个 List<Tasks>
,其中包含一堆 tasks
。许多用户可以将许多 tasks
放入此列表。
public class Tasks
{
public string UserId { get, set }
public DateTime StartDate { get, set; }
public DateTime EndDate { get; set; }
}
我需要用最快的时间完成 task
每 UserId
。基本上,如果 UserId = 123
有 5 个任务,我只想为所有用户提供最快的一个,依此类推。
像这样:
var result = lst.GroupBy(c => c.UserId, (key, element) => new
{
key,
fast = element.Min(d => d.EndDate - d.StartDate)
});
你可以这样做:
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
class 实际上代表一个任务。我不会使用 Task
作为我的 class 的名称,因为它是 .net 中众所周知的 class 的名称,这可能会引起混淆。