我有一个包含这样数据的列表
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 来做到这一点?
最佳答案
您可以尝试使用一对 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)
}
);
关于c# - 使用 linq C# 将列表转换为嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17108406/