我在1个列表中有这样的记录:
Id Title Name Basic Message
10 Stats2 abc 10 sldjs
10 Stats2 pqr 20 sldjs
10 Stats2 xyz 30 sldjs
10 Stats2 abc 40 sldjs
11 Stats3 aaa 0 sldjs
11 Stats3 bbb 0 sldjs
11 Stats3 ccc 0 sldjs
11 Stats3 ddd 0 sldjs
我有一个类型列表的变量,它包含以下记录:
var list = new List<Stats>();//this variable hold all above records.
现在我正尝试从列表变量中创建如下记录:
[0]:Stats2:
abc
10 sldjs
40 sldjs
pqr
20 sldjs
xyz
30 sldjs
[1]:Stats3:
aaa
0 sldjs
bbb
0 sldjs
ccc
0 sldjs
ddd
0 sldjs
这就是我的尝试,但没有得到如何创建内部嵌套子项,如(上面显示的2个abc记录):
var data =list.GroupBy(ed =>ed.Id)
.Select
(
)
答案 0 :(得分:2)
var data =list.GroupBy(p => p.Title).Select(p => new
{
Title = p.Key,
Items = p.GroupBy(q => q.Name)
.ToDictionary(q => q, q => new { q.Basic, q.Message })
});
答案 1 :(得分:2)
您还需要对内部记录进行分组。结果可能类似于Dictionary<int, Dictionary<string, List<Stats>>>
。外部字典的键是ID
值,内部键是Name
值,值是Stats
的列表Title
和{{1} }}:
Name
您可以访问结果中的值:
var result = list.GroupBy(rec => rec.ID)
.ToDictionary(
group => group.Key,
group => group.GroupBy(stat => stat.Name)
.ToDictionary(g => g.Key, g => g.ToList())
);
上面的例子是一个包含result[10]["abc"]
Stats
10和40的列表。
如果您只想在最终记录中保留Basic
和Basic
,则可以使用Message
将Select
投影到匿名类型:
Stats