You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将LINQ查询结果存入MultiKeyDictionary及统计分组对象组合数量

实现按组和人员统计并填充MultiKeyDictionary

我来帮你一步步搞定这个需求,核心思路是先用LINQ完成分组统计,再把结果映射到MultiKeyDictionary中。假设你的MultiKeyDictionary支持通过双键添加元素(比如有Add(string key1, string key2, int value)方法或者索引器this[string key1, string key2]),下面是完整的方法实现:

public MultiKeyDictionary<string, string, int> GetPersonsPerGroup(IEnumerable<Home> homes, List<string> gr, List<string> na)
{
    // 初始化目标字典
    var resultDict = new MultiKeyDictionary<string, string, int>();

    // 用LINQ完成过滤、分组和统计
    var groupedData = homes
        // 先筛选出指定组和指定人员的数据,避免统计无关内容
        .Where(h => gr.Contains(h.groupname) && na.Contains(h.personname))
        // 按组名+人名的组合作为键分组
        .GroupBy(h => new { h.groupname, h.personname })
        // 统计每个组合对应的对象数量
        .Select(g => new 
        { 
            GroupName = g.Key.groupname, 
            PersonName = g.Key.personname, 
            Count = g.Count() 
        });

    // 遍历统计结果,填充到MultiKeyDictionary中
    foreach (var item in groupedData)
    {
        // 如果字典支持索引赋值就用这个,否则用Add方法(分组已保证键唯一,不会冲突)
        resultDict[item.GroupName, item.PersonName] = item.Count;
        // 替代写法:resultDict.Add(item.GroupName, item.PersonName, item.Count);
    }

    return resultDict;
}

关键步骤拆解:

  • 过滤数据:用Where筛选出属于目标组列表gr和目标人员列表na的Home对象,减少后续分组的计算量。
  • 分组统计:通过GroupBy创建以groupname和personname为组合键的分组,再用Count()统计每个组合对应的对象总数。
  • 填充字典:遍历LINQ输出的统计结果,将每组的双键和计数同步到MultiKeyDictionary中。如果你的字典实现支持批量初始化(比如接受元组序列的构造方法),还可以简化成:
    // 假设MultiKeyDictionary支持元组序列初始化
    var groupedTuples = groupedData.Select(item => (item.GroupName, item.PersonName, item.Count));
    var resultDict = new MultiKeyDictionary<string, string, int>(groupedTuples);
    

内容的提问来源于stack exchange,提问作者Vandenberghe Willy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:49:44