LINQ 按结果属性拆分和分组

标签 linq split group-by

我有一个对象,该对象的属性之一是逗号分隔的名称列表,例如

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 来查询此数据,拆分审计员属性(property),按审计员分组并计算每个审计员花费的时间总和,以便给我一份审计员列表以及针对每个审计员花费的时间,例如

亚当·韦斯特 15,
乔治·贝斯特 10,
猫王 3

谁能帮我做这件事?谢谢。

最佳答案

使用 lambda:

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();

关于LINQ 按结果属性拆分和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17941346/

相关文章:

c# - 使用动态比较运算符构建 lambda 表达式(谓词)

c# - 嵌套的 ForEach 循环到 Linq

java - String.split 数组到另一个二维字符串数组

python-3.x - 给定两个音频文件,其中一个是另一个的摘要,是否有一种python方法来查找何时在原始文件中重播该摘要?

python - Pandas - 使用定界符拆分文本

SQL Sum 多行合二为一

c# - MonoTouch 和 LINQ - 由于对象的当前状态,操作无效

LINQ:日期时间字段中按月和年分组

mysql - 获取每位老师成绩最低的学生

r - 如何计算pivot_wider数据框中患者总数的百分比?