Как сгруппировать по левому соединению по нескольким столбцам с помощью linq и получить количество сгруппированных записей? - PullRequest
0 голосов
/ 04 августа 2020

Допустим, у нас есть: Сотрудник класс (свойство: EmployeeID, EmployeeName, DepartmentID, Department - как свойство навигации) и Department класс (свойство: DepartmentID, DepartmentName, Employees - как навигационная опора). Связь между этими двумя таблицами - один ко многим. Теперь конкретный пример:

Сотрудник таблица

EmployeeID EmployeeName DepartmentID     
1          Peter        1               
2          Anna         1                
3          John         2   
          

Отдел таблица

DepartmentID  DepartmentName                                                        
1             IT                                                                    
2             Marketing                                                              
3             HR         

                                                   

Конечный результат должен быть отображение каждого отдела (DepartmentID, DepartmentName, NumOfEmployees) независимо от того, есть ли у него сотрудники с количеством сотрудников в отделе, например: 1, IT, 2 | 2, Маркетинг, 1 | 3, HR, 0.

Мой синтаксис был:

var dbContext.Departments.Include(d => d.Employees).    
                          GroupBy(d => new { d.DepartmentID, d.DepartmentName }).
                          Select(x => new {
                                   DepartmentID = x.Key.DepartmentID,
                                   DepartmentName = x.Key.DepartmentName,
                                   NumOfEmployees = x.Count()
    }).ToList();

Проблема в том, что атрибуту NumOfEmployees присвоено значение 1 для каждого отдела, и я не знаю почему. Как бы выглядел синтаксис LINQ для правильного лямбда-выражения?

1 Ответ

3 голосов
/ 05 августа 2020

Я бы сказал, что GroupBy здесь вам не нужен, а можно просто:

var result = dbContext.Departments
    .Select(x => new 
    {
        DepartmentID = x.DepartmentID,
        DepartmentName = x.DepartmentName,
        NumOfEmployees = x.Employees.Count()
    })
    .ToList();
...