После ToList()
у вас есть List<EmployeeAllocatedReleasedBonusViewModel>
.
В Sum(s => s.AllocatedToEmployee)
каждый s
равен единице EmployeeAllocatedReleasedBonusViewModel
.Очевидно, что EmployeeAllocatedReleasedBonusViewModel
имеет свойство AllocatedToEmployee
, которое, вероятно, имеет тип decimal.Это может быть суммировано в один десятичный знак.
Результат Sum
(десятичный знак) является вводом вашего GroupBy
.Есть ли у типа decimal метод GroupBy
?Конечно, это не так!
Увы, вы забыли сообщить нам свои требования.Трудно извлечь их из кода, который не выполняет то, что вы хотите.
Мне кажется, что у вас есть два отношения один ко многим:
Employees
иметь ноль или более BonusReleases
.Каждый BonusRelease
принадлежит ровно одному Employee
с использованием внешнего ключа Jobs
, имеющего ноль или более BonusReleases
.Каждый BonusRelease
принадлежит ровно одному Job
.
Теперь, что вы хотите: хотите ли вы все JobNumbers
и JobDescriptions
всех Jobs
с общим количеством их AllocatedPercentage
?Я не уверен, что Employees
делает в этом запросе.
Всякий раз, когда вы хотите, чтобы элементы с их подэлементами, например, школы с их учениками, клиенты с их заказами, заказы с их линиями заказов,используйте GroupJoin.Если вы хотите наоборот, учащийся школы, в которой он учится, заказ с клиентом, который разместил заказ, используйте Join.
var result = dbContext.Jobs.GroupJoin(dbContext.BonusReleases,
job => job.Id, // from every Job take the primary key
bonusRelease => bonusReleas.JobId, // from every BonusRelease take the foreign key
// parameter ResultSelector: take every Job with all its BonusReleases to make a new:
(job, bonusReleasesOfThisJob) => new
{
JobNumber = job.JobNumber,
JobDescription = job.JobDescription
// do you want the total of all allocated percentages?
TotalAllocatedPercentages = bonusReleasesOfThisJob
.Select(bonus => bonus.Amount)
.Sum(),
// do something to make it a percentage
// or do you want a sequence of allocated percentages?
TotalAllocatedPercentages = bonusReleasesOfThisJob
.Select(bonus => bonus.Amount)
.ToList(),
});
Или вы хотите JobNumber / JobDescription /Общий выделенный бонус на одного сотрудника?
var result = dbContext.Employees.GroupJoin(dbContext.BonusReleases,
employee => employee.Id, // from every Employee take the primary key
bonus => bonus.EmployeeId, // from every BonusRelease take the foreign key
(employee, bonusesOfThisEmployee) => new
{
// Employee properties:
EmployeeId = employee.Id,
EmpoyeeName = employee.Name,
// for the jobs: Join the bonusesOfThisEmployee with the Jobs:
Jobs = dbContext.Jobs.GroupJoin(bonusOfThisEmployee,
job => job.Id,
bonusOfThisEmployee => bonusOfThisEmployee.JobId,
(job, bonusesOfThisJob) => new
{
Number = job.Id,
Description = job.Description,
TotalBonus = bonusOfThisJob.Select(bonus => bonus.Amount).Sum(),
}),
});