首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ分裂与生成性质的分组

LINQ分裂与生成性质的分组
EN

Stack Overflow用户
提问于 2013-07-30 07:57:22
回答 3查看 837关注 0票数 2

我有一个对象,对象的一个属性是逗号分隔的名称列表。

代码语言:javascript
复制
IList<Audits> auditData = new List<Audits>();
auditData.Add(new Audit
              {
                  Auditors = "Adam West, George Best",
                  TimeSpent = 7
              });

auditData.Add(new Audit
              {
                  Auditors = "Adam West",
                  TimeSpent = 5
              });

auditData.Add(new Audit
              {
                   Auditors = "Adam West, George Best, Elvis Presley",
                   TimeSpent = 3
              });

我想使用LINQ查询这些数据,拆分审计师属性,按审计师分组,并为每个审计师总计时间,给出一份审计员列表,列出针对每个审计员花费的时间。

亚当·韦斯特15

乔治·贝斯特10

猫王普雷斯利3

有人能帮我吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-30 08:10:34

这应该是你想做的事:

代码语言:javascript
复制
var query =
    from a in auditData
    let auditors = a.Auditors.Split(',').Select(s => s.Trim())
    from au in auditors
    group a.TimeSpent by au into g
    select new { Auditor = g.Key, TimeSpent = g.Sum() };
票数 2
EN

Stack Overflow用户

发布于 2013-07-30 08:17:44

使用lambdas:

代码语言:javascript
复制
var results =
    auditData
        // Flatten list - to list of individual auditors and time spent
        .SelectMany(
            audit => audit.Auditors.Split(',').Select(s => s.Trim()),
            (audit, auditorName) => new
            {
                Auditor = auditorName,
                TimeSpent = audit.TimeSpent,
            })
        // Group by auditor name
        .GroupBy(a => a.Auditor)
        // Sum time spent
        .Select(auditorGroup => new
        {
            Auditor = auditorGroup.Key,
            TotalTimeSpent = auditorGroup.Sum(a => a.TimeSpent)
        })
        .ToList();
票数 3
EN

Stack Overflow用户

发布于 2013-07-30 08:28:02

代码语言:javascript
复制
var res = auditData.Select(audit => audit.Auditors.Split(',').ToDictionary(a => a, a => audit.TimeSpent))
            .SelectMany(a => a)
            .GroupBy(a => a.Key)
            .ToDictionary(g => g.Key, s => s.Sum(g => g.Value));

首先拆分字符串并转换为KeyValue对。然后把字典压成一本。然后分组和和。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17941346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档