[英]Join, Group by and Sum in Linq
我想通過employeeId對員工的加班時間進行分組,並獲取employeeNames數據和員工每月加班總時數。 但是這個 Linq 查詢給出了翻譯錯誤。
var results =
from overtime in context.Overtimes
join employeeCredential in context.EmployeeCredentials
on overtime.EmployeeId equals employeeCredential.id
join employeeDetail in context.EmployeeDetails
on employeeCredential.id equals employeeDetail.employeeId
where overtime.Month == month && overtime.Year == year
group new { overtime, employeeCredential, employeeDetail } by overtime.EmployeeId into g
select new MonthlyOvertimeWorkHours
{
EmployeeName = g.First().employeeDetail.employeeName,
TotalWorkHourOfMonth = g.Sum(t => t.overtime.OvertimeWorkHour)
};
錯誤
{ "error": employeeCredential\r\n IsNullable: True\r\n, \r\n employeeDetail = EntityShaperExpression: \r\n EntityType: EmployeeDetail\r\n ValueBufferExpression: \r\n ProjectionBindingExpression: employeeDetail\r\n IsNullable: True\r\n }\r\n.Select(s => s.employeeDetail.employeeName)\r\n.First()' 無法翻譯。 以可翻譯的形式重寫查詢,或通過插入對“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的調用顯式切換到客戶端評估。 }
在 EF Core 6 之前,您無法在分組后訪問記錄(這通常很糟糕)。 只有聚合和Key
可用。
要解決問題,只需將employeeName
添加到分組鍵。
var results =
from overtime in context.Overtimes
join employeeCredential in context.EmployeeCredentials
on overtime.EmployeeId equals employeeCredential.id
join employeeDetail in context.EmployeeDetails
on employeeCredential.id equals employeeDetail.employeeId
where overtime.Month == month && overtime.Year == year
group new { overtime, employeeCredential, employeeDetail } by new { overtime.EmployeeId, employeeDetail.employeeName } into g
select new MonthlyOvertimeWorkHours
{
EmployeeName = g.Key.employeeName,
TotalWorkHourOfMonth = g.Sum(t => t.overtime.OvertimeWorkHour)
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.