У меня проблема с оператором LINQ. То есть, я хочу сделать отчет «В отделе X Y сотрудников на уровне Z» или «В отделе исследований и разработок 12 человек находятся на уровне 2».
Таблица отдела: id, код, имя
Таблица уровней отдела: уровень
Подразделение персонала: идентификатор_персонала, идентификатор_отдела, текущий уровень
Здесь мой запрос LINQ:
var query = (
from a in cx.Department
from al in cx.DepartmenLevel
join pd in cx.PersonnelDepartment on
new { dId = a.Id, al.Level, IsDeleted = false } equals
new { dId = ppa.PdAbilityId, Level = pd.CurrentLevel, pd.IsDeleted } into pdj
from pd in pdj.DefaultIfEmpty()
where a.IsDeleted == false && al.IsDeleted == false
select new
{
dep = new
{
a.Id,
a.Code,
a.Name
},
depLevel = new
{
al.Level
},
perDep = new
{
Id = (Guid?)ppa.PdPersonnelId ?? null
}
});
И отображение в backend:
var tempRes2 = await query.ToListAsync();
var tempRes = tempRes2
.GroupBy(g => new { g.dep, g.depLevel, g.perDep })
.Select(s => new { s.Key.dep, s.Key.depLevel, s.Key.perDep })
.ToList();
IList<ParentResultDto> result =
tempRes.GroupBy(g => g.dep).Select(s => new ParentResultDto()
{
DepartmentCode = s.Key.Code,
DepartmentName = s.Key.Name,
DepartmentLevel = tempRes
.Where(w => w.dep.Id == s.Key.Id)
.GroupBy(g1 => new { g1.depLevel , g1.perDep })
.Select(s1 => new ChildResultDto()
{
Level = s1.Key.depLevel.Level,
PersonnelCount = s1.Key.perDep.Distinct().Count
}).ToList()
}).ToList();
return result;
Запрос g1.perDep взорвет группу. И я понятия не имею, как это решить. Я думаю, это работа. Спасибо за ответ