Linq GroupBy和多列

fea*_*net 3 c# linq linq-to-objects group-by

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)
                );
}
Run Code Online (Sandbox Code Playgroud)

请原谅相当人为的例子.

如何让员工团队进入GetEmployeeExpenses?我假设我需要第二组,但我无法解决语法问题.

请注意,对于给定的员工,Team无论如何他们总是相同,所以我很乐意采用Team例如第一个按记录分组的.

所以...

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

=>

EmployeeExpense { EmployeeId = 1, Team = Sales, Cost = 150 }
Run Code Online (Sandbox Code Playgroud)

Ant*_*ram 9

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

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

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