4

我有一个包含这样的数据的列表

ID  |   START_DATE          |   END_DATE                |   Chapter     |   ID_OWNER
1       01/03/2013 05:15:14     01/03/2013 06:20:14         1               1
1       01/03/2013 06:25:33     01/03/2013 06:40:11         2               1
1       01/03/2013 05:15:14     01/03/2013 06:20:15         1               2
1       01/03/2013 06:25:33     01/03/2013 06:40:18         2               2   
2       01/03/2013 05:01:34     01/03/2013 05:30:13         1               3
2       01/03/2013 05:31:20     01/03/2013 06:30:13         2               3
2       01/03/2013 06:32:20     01/03/2013 07:20:01         3               3
1       02/03/2013 05:15:14     01/03/2013 06:20:14         1               1
1       02/03/2013 06:25:33     01/03/2013 06:40:11         2               1

我想创建一个这样的字典:

Dictionary<int, Dictionary<string,int>
Dictionary<ID, Dictionary<START_DATE.Date, Total of owners>

结果就这样停留在哪里。

ID
1
    START_DATE      | TOTAL
    01/03/2013          2
    02/03/2013          1
ID
2
    START_DATE      | TOTAL
    01/03/2013          1

有没有办法使用 C# 用 linq 做到这一点?

4

1 回答 1

6

您可以通过一对GroupBy和一对 调用来试试这个ToDictionary,如下所示:

var res = list
    .GroupBy(v => v.ID)
    .ToDictionary(
        g => g.Key
    ,   g => g.GroupBy(v => v.START_DATE.Date)
        .ToDictionary(h => h.Key, h => h.Seelct(x => x.ID_OWNER).Distinct().Count())
    );

如果您还想添加每天的总时间,您可以这样做:

var res = list
    .GroupBy(v => v.ID)
    .ToDictionary(
        g => g.Key
    ,   g => g.GroupBy(v => v.START_DATE.Date)
        .ToDictionary(h => h.Key, h => new {
             Count = h.Seelct(x => x.ID_OWNER).Distinct().Count())
         ,   TotalTime = h.Sum(h => x.END_DATE-x.START_DATE)
         }
    );
于 2013-06-14T12:32:38.400 回答