将IGrouping转换为IDictionary

Kin*_*sin 2 c# linq dictionary group-by

作为数据库查询的结果,我有以下分组:

5: Key1
3: Key2, Key3, Key4
2: Key5
1: Key6, Key7
Run Code Online (Sandbox Code Playgroud)

我想x通过分组键将顶部x(而用户定义)作为字典.

对于前三名,我想要一本词典

Key1: 5
Key2: 3
Key3: 3
Key4: 3
Key5: 2
Run Code Online (Sandbox Code Playgroud)

对于我想要的前2名

Key1: 5
Key2: 3
Key3: 3
Key4: 3
Run Code Online (Sandbox Code Playgroud)

并且仅限前1名

Key1: 5
Run Code Online (Sandbox Code Playgroud)

我怎样才能将其IGrouping<int, string>转换为IDictionary<string, int>.注意:密钥是唯一的.

D S*_*ley 5

首先,您可以通过以下方式获得"前N个"组Take:

groups.Take(n)
Run Code Online (Sandbox Code Playgroud)

然后展平为价值密钥对列表

      .SelectMany(g => g, (g, k) => new {Value = g.Key, Key = k})
Run Code Online (Sandbox Code Playgroud)

然后打电话ToDictionary:

      .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Run Code Online (Sandbox Code Playgroud)