linq Group难度很大

lea*_*ing 0 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; }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

我怀疑你想要:

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)

  • @learning:目前尚不清楚你希望如何得到结果 - 你按日期分组然后聚合......聚合结果自然不具有原始值.你谈到"发送"所有的价值观 - 谁来?如果您可以更清楚地了解所表示的数据,我们应该能够找出如何执行转换. (2认同)