linq Group难度很大

时间:2011-08-02 06:08:24

标签: c# linq

我有一个列表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; }

1 个答案:

答案 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() });