LINQ过滤和聚合

时间:2011-06-07 09:19:59

标签: c# linq grouping aggregation

我有一个可以这样表示的项目列表:

ClientNo     Name     Date        Time
0001         Mike     01/12/2000    6
0002         Dave     01/12/2000   12
0001         Mike     01/12/2000   10
0002         Dave     02/12/2000    6

是否可以使用LINQ对此进行分组和聚合以查找类似的内容?

ClientNo     Name     Date        Time
0001         Mike     01/12/2000  16
0002         Dave     01/12/2000  12
0002         Dave     02/12/2000   6

我正在尝试为特定日期的每个客户返回一个聚合行。我一直在摆弄以下但未能做到正确。不幸的是,我对LINQ的了解很差。

var result = from p in ListofModel
             group p by new { p.ClientNo, p.Date, p.Name, p.Time } into g
             orderby g.key.Date
             select new ModelClass
             {
                 ClientNo = g.Key.ClientNo,
                 Name = g.key.Name,
                 .....
             }

毫不奇怪,这并没有给我我想要的结果。如何解决?

2 个答案:

答案 0 :(得分:0)

我认为它应该是这样的:

from p in ListofModel
group p by new { p.ClientNo, p.Date, p.Name } into g
orderby g.key.Date
select new ModelClass
{
    ClientNo = g.Key.ClientNo,
    Name = g.key.Name,
    Date = g.Key.Date,
    Time = g.Sum(x => x.Time)
}

您不希望按时间分组,因此不应将其包含在组密钥中。

答案 1 :(得分:-2)

试试这个:

var result = from p in ListofModel
             group p by new { p.ClientNo, p.Name, p.Date } into g
             orderby g.Key.Date
            select new ModelClass
            {
             ClientNo = g.Key.ClientNo,
             Name = g.Key.Name,               
             Date = g.Key.Date,
             Time = g.SUM(t => t.Time)                  
            }