基于相同列组合或分组行

时间:2014-03-31 19:44:32

标签: .net linq grouping

我正在尝试浏览一系列DataRows,以便根据三列组合相同的行,但即使对此进行了一些研究,我仍然不确定从哪里开始。

例如,假设我要分组的DataRow列名为UserIDProjIDWorkID,还有一些我可以忽略的其他列。还有一个名为Hours的重要专栏,我将为每个小组添加一个。这是我想要实现的目标的直观表达:

初始

UserID |  ProjID | WorkID | Hours
---------------------------------
1      |   55    |   1    |  3
---------------------------------
1      |   55    |   5    |  2
1      |   55    |   5    |  5
1      |   55    |   5    |  6
---------------------------------
1      |   77    |   5    |  2
---------------------------------
2      |   77    |   2    |  7
2      |   77    |   2    |  2

结合

UserID |  ProjID | WorkID | Hours
---------------------------------
1      |   55    |   1    |  3
---------------------------------
1      |   55    |   5    |  13 (sum of 6 + 5 + 2)
---------------------------------
1      |   77    |   5    |  2
---------------------------------
2      |   77    |   2    |  9 (sum of 7 + 2)

关于我应该如何开始的任何想法?此外,我对所有方法都持开放态度,而不仅仅是LINQ。

1 个答案:

答案 0 :(得分:0)

您使用的是linq-to-entitieslinq-to-sqllinq-to-objects吗?

无论如何,您的解决方案应该是这样的:

var query = from x in list
            group x by new { x.UserID, x.ProjID , x.WorkID } into g
            select new
            {
              g.Key.UserID,
              g.Key.ProjID,
              g.Key.WorkID,
              Hours = g.Sum(x => x.Hours),
            };