我有一个列表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; }
答案 0 :(得分:8)
我怀疑你想要:
var totals = taskList.GroupBy(x => x.Date)
.Select(g => new { Date = g.Key,
Total = g.Sum(x => x.Amount) });
或者一气呵成:
var totals = taskList.GroupBy(x => x.Date, (date, values) =>
new { Date = date,
Total = values.Sum(x => x.Amount) });
请注意,这假设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() });