如何从字典和组的列表中提取值,并使用Linq转换为单个字典

本文关键字:字典 转换 单个 Linq 提取 列表 | 更新日期: 2023-09-27 18:13:03

我有一个sql proc返回的结果类似于

GroupId     PersonId
1           2
1           3
2           4
2           6

这是我调用存储过程的dapper查询

List<IDictionary<string, object>> result = (dbconnection.Query("MyStoredProcName", null,
                    commandType: CommandType.StoredProcedure, commandTimeout: 0)
                    as IEnumerable<IDictionary<string, object>>).ToList();

我试过这个var selectManyResult = result.SelectMany(r => r.ToDictionary(d => d.Key, d => (int)d.Value));,但这似乎是错误的。

更新:为了澄清,我的dapper-sql查询结果如下,我无法更改。

IEnumerable<IDictionary<string, object>>

期望结果:

使用这个结果和LINQ,我需要得到Dictionary<int,List<int>>,其中key是GroupId,List是组中的personsid列表。但我不太清楚该怎么做。所以我的最终结果字典看起来像这个

   Key    Value
    1       2,3
    2       4,6

非常感谢您的帮助感谢

如何从字典和组的列表中提取值,并使用Linq转换为单个字典

我猜IDictionary<string, object>是Dapper表示(Name,Value(对(属性(的方法。在您的情况下,密钥应该是"GroupId"answers"PersonId",这样您就可以通过以下方式实现目标:

var groupedResult = result.GroupBy(e => (int)e["GroupId"])
    .ToDictionary(g => g.Key, g => g.Select(e => (int)e["PersonId"]).ToList());

请改用查找。因此:

var lookup = result.ToLookup(r => r.GroupId, r => r.PersonId)

查找在概念上与字典相同,但允许每个关键字有多个值,因此

lookup[1]

返回值为2,3的IEnumerable<int>