c# - Linq GroupBy 和多列

标签 c# linq group-by linq-to-objects

class ExpenseClaim
{
    int EmployeeId;
    int Team;
    double Cost;
}


List<EmployeeExpense> GetEmployeeExpenses()
{
    return _expenseClaims // `_expenseClaims` is `List<ExpenseClaim>`
             .GroupBy(e => e.EmployeeId)
             .Select(x =>
                new EmployeeExpense(
                        x.Key,
                        // TODO: employee team?
                        x.Sum(e => e.Cost)
                );
}

请原谅这个相当人为的例子。

如何在 GetEmployeeExpenses 中获取员工团队?我假设我需要第二个 group by 但我无法计算出语法。

请注意,对于给定的员工,他们的 Team 总是相同的,所以我很乐意以 Team 为例,第一个分组是记录。

所以...

ExpenseClaim { EmployeeId = 1, Team = Sales, Cost = 100 }
ExpenseClaim { EmployeeId = 1, Team = Sales, Cost = 50 }

=>

EmployeeExpense { EmployeeId = 1, Team = Sales, Cost = 150 }

最佳答案

在您的特定情况下,您可以在 Select 中使用 x.First().Team 来获取团队信息。

对于实际需要对多个字段进行分组的其他情况,您可以对匿名类型进行分组。比如

someQuery.GroupBy(f => new { f.Foo, f.Bar }).Select(...);

关于c# - Linq GroupBy 和多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439352/

相关文章:

linq - "foldable"函数的正式术语是什么?

c# - 从 xml 文件加载控件

C# GroupBy - 创建多个分组级别

c# - c# 表单的数据库

c# - 如何更改 RSACryptoServiceProvider 的 CSP 参数

c# - 这个 EF Join 方法调用有什么问题?

php - 如何在多个左连接中使用多个分组依据并按时间戳对它们进行排序?

Mysql Rollup repeatingid字段

c# - 如何获取 Hotmail 联系人电子邮件地址?

c# - 没有表达式的 C# 字符串插值如何编译?