使用linq查询在数据表上分组

时间:2014-02-22 12:28:45

标签: linq datatable

以下是我的数据表中的行:

TemplateName    Task                        Days
PT_Case     Assign Acceptance Task          83
PT_Case     Assign Acceptance Task          64
PT_Case     Assign Metadata Task            65
PT_Case     Assign Metadata Task            93  
PT_Type     Complete Metadata Task          67
PT_Type     Complete Metadata Task          -3
PT_Type     Assign Acceptance Task          67
PT_Type     Assign Acceptance Task          61

我需要通过linq查询输出以下内容:

TemplateName         Task              Days  TotalDays
PT_Case    Assign Acceptance Task      73    152
PT_Case      Assign Metadata Task      79    152
PT_Type    Complete Metadata Task      32    96
PT_Type    Assign Acceptance Task      64    96

注意:“天数”计算为任务天数的平均值。 请建议,如何实现它。提前谢谢。

1 个答案:

答案 0 :(得分:0)

var query = from r in dt.AsEnumerable()
            group r by r.Field<string>("TemplateName") into templates
            let totalDays = templates.Sum(r => r.Field<int>("Days"))
            from t in templates
            group t by new
            {
                TemplateName = templates.Key,
                Task = t.Field<string>("Task"),
                TotalDays = totalDays
            } into tasks
            select new
            {
                tasks.Key.TemplateName,
                tasks.Key.Task,
                Days = tasks.Sum(r => r.Field<int>("Days")),
                tasks.Key.TotalDays
            };

按模板名称对行进行分组,并计算模板的总天数。然后,它按任务对模板行进行分组,并计算任务的天数。多数民众赞成我如何理解你想做什么。但结果与您的预期结果不同(我不明白您是如何得到这些值的):

 TemplateName         Task              Days  TotalDays
    PT_Case    Assign Acceptance Task   147   305
    PT_Case      Assign Metadata Task   158   305
    PT_Type    Complete Metadata Task    64   192
    PT_Type    Assign Acceptance Task   128   192