C# 尝试使用linq创建分组记录
我在1个列表中有这样的记录:C# 尝试使用linq创建分组记录,c#,.net,linq,C#,.net,Linq,我在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 Stats
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.
这就是我如何尝试但没有得到如何创建内部嵌套子项的方法,例如(2条abc记录,如上所示)):
您还需要对内部记录进行分组。结果可能类似于一个
字典
。外部字典的键将是ID
值,内部键将是Name
值,这些值将是具有标题和名称的Stats
列表:
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
和Basic
10和40的列表
如果您只想在最终记录中保留Basic
和Message
,可以使用Select
将Stats
投影到匿名类型:
var result = list.GroupBy(rec => rec.ID)
.ToDictionary(
group => group.Key,
group => group.GroupBy(stat => stat.Name)
.ToDictionary(g => g.Key, g => g.Select(stat => new {stat.Title, stat.Basic, stat.Message}).ToList())
);
您还需要对内部记录进行分组。结果可能类似于一个字典
。外部字典的键将是ID
值,内部键将是Name
值,这些值将是具有标题和名称的Stats
列表:
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
和Basic
10和40的列表
如果您只想在最终记录中保留Basic
和Message
,可以使用Select
将Stats
投影到匿名类型:
var result = list.GroupBy(rec => rec.ID)
.ToDictionary(
group => group.Key,
group => group.GroupBy(stat => stat.Name)
.ToDictionary(g => g.Key, g => g.Select(stat => new {stat.Title, stat.Basic, stat.Message}).ToList())
);
你不认为你的第一个组员应该在Id而不是标题上吗?@如果你期望在问题中显示结果,就不要学习。您的示例结果首先按Title
分组,然后按Name
分组,而不是按ID
@Learning分组。我刚刚意识到(巧合地?)这些分组是相同的,至少对于您的示例数据是一样的。所有Stats2
都有ID
10,但我看不出在原始数据中是否总是这样。但在您的示例结果中,您使用了Title
作为键,这也是我使用它的原因。我对您为帮助我所做的努力投了赞成票,但我担心的是,如果我有id为12且标题相同的记录,那么我希望有3个结果:[0]:Stats2[1]:Stats3[2]:Stats2@Learing好的,我更新我的答案…只需使用ID而不是标题。你不认为你的第一组成员应该在ID而不是标题上吗?@如果你期望问题中显示的结果,就不会学习。您的示例结果首先按Title
分组,然后按Name
分组,而不是按ID
@Learning分组。我刚刚意识到(巧合地?)这些分组是相同的,至少对于您的示例数据是一样的。所有Stats2
都有ID
10,但我看不出在原始数据中是否总是这样。但在您的示例结果中,您使用了Title
作为键,这也是我使用它的原因。我对您为帮助我所做的努力投了赞成票,但我担心的是,如果我有id为12且标题相同的记录,那么我希望有3个结果:[0]:Stats2[1]:Stats3[2]:Stats2@Learing好的,我更新我的答案…只需使用ID而不是标题。你不认为你的第一组成员应该使用ID而不是标题吗?@Learning,根据您的输出,您将结果与标题分组,我也是。对于您为帮助我所做的努力,我投了赞成票,但我担心,如果我有id为12且标题相同的记录Stats2,那么我希望有3个结果:[0]:Stats2[1]:Stats3[2]:Stats2非常感谢您的回答,请继续这样帮助:)您不认为您的第一组成员应该在Id而不是标题上吗?@Learning,根据您的输出,您将结果与标题分组。我也是。对于您为帮助我所做的努力,我投了赞成票,但我担心,如果我有id为12且标题相同的记录,那么我希望有3个结果:[0]:Stats2[1]:Stats3[2]:Stats2非常感谢您的回答,请继续这样帮助:)