如何从字典和组的列表中提取值,并使用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
非常感谢您的帮助感谢
我猜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>