Ищете лучший способ получить коллекцию элементов по идентификатору

#c# #asp.net #linq #linq-to-sql

#c# #asp.net #linq #linq-to-sql

Вопрос:

У меня довольно стандартная настройка с отношением «многие ко многим» между отделами и сотрудниками.

 Departments
---------------
DepartmentID
Name

Employees
---------------
EmployeeID
Name

DepartmentEmployees
-------------------
DepartmentID
EmployeeID
  

Учитывая отдел, я хотел бы вернуть список сотрудников для этого отдела. Вот что у меня есть:

 public partial class Department
{
    public List<Employee> GetEmployees()
    {
        int[] employeeIds = MyDBDataContext.DepartmentEmployees.
                            Where(de => de.DepartmentID == this.DepartmentID).
                            Select(de => de.EmployeeID.Value).ToArray();

        List<Employee> employees = (from x in MyDBDataContext.Employees
                                    where employeeIds.Contains(x.EmployeeID)
                                    select x).ToList();

        return employees;
    }
}
  

Это работает нормально, но мне не нравится выполнять два вызова базы данных. Есть ли другой способ сделать это с помощью LINQ?

Ответ №1:

Почему бы не использовать объединение?

 var employees = (from e in MyDBDataContext.Employees
                 join de in MyDBDataContext.DepartmentEmployees
                     on e.EmployeeID equals de.EmployeeID
                 where de.DepartmentID == this.DepartmentID
                 select e).ToList();
  

Комментарии:

1. Спасибо, я даже не знал, что могу это сделать. Думаю, мне нужно еще немного почитать о LINQ