[英]Linq GroupBy and multiple columns
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
獲得員工團隊? 我假設我需要第二組,但我無法解決語法問題。
請注意,對於給定的員工,他們的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(...);
查詢它的表達式版本( 可能更容易閱讀,具體取決於情況和分組數量):
IEnumerable<EmployeeExpense> GetEmployeeExpenses(List<ExpenseClaim> claims)
{
return
from c in claims
group c by c.EmployeeId into groupedById
from g in groupedById
group g by g.Team into groupedByTeam
let firstElement = groupedByTeam.First()
select new EmployeeExpense {
EmployeeId = firstElement.EmployeeId,
Team = firstElement.Team,
Cost = groupedByTeam.Sum(e => e.Cost)
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.