我有一个列表myTask,我想在其中按日期进行分组并计算金额上的每个日期的总数.
我怎样才能做到这一点?
public class Task{
public DateTime Date{get;set;}
public string Item {get;set;}
public decimal Amount {get;set;}
}
public List<Task> taskList{ get; set; }
Run Code Online (Sandbox Code Playgroud)
我怀疑你想要:
var totals = taskList.GroupBy(x => x.Date)
.Select(g => new { Date = g.Key,
Total = g.Sum(x => x.Amount) });
Run Code Online (Sandbox Code Playgroud)
或者一气呵成:
var totals = taskList.GroupBy(x => x.Date, (date, values) =>
new { Date = date,
Total = values.Sum(x => x.Amount) });
Run Code Online (Sandbox Code Playgroud)
请注意,这是假设Date属性确实是日期而不是时间戳.否则你可能想要x => x.Date.Date作为第一个参数.
如果这不是你想要的,请说明它与你想要的有何不同.
编辑:好的,如果你想要的项目 - 但可能不是每个项目的日期 - 你可以写:
var totals = taskList.GroupBy(x => x.Date, (date, values) =>
new { Date = date,
Total = values.Sum(x => x.Amount),
Items = values.Select(x => x.Item).ToList(),
Amounts = values.Select(x => x.Amount).ToList() });
Run Code Online (Sandbox Code Playgroud)