Получение объектов с помощью LINQ и хранимой процедуры

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

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

Вопрос:

У меня есть хранимая процедура, которая возвращает данные в этом формате:

 EmployeeID | DepartmentID
---------------------
1 | 1
2 | 1
3 | 2
4 | 4
5 | 4
  

Я получаю результаты следующим образом:

 List<spResult> results = DataContext.sp().ToList();
  

Я хотел бы получить список сотрудников для определенного отдела на основе данных, возвращенных из хранимой процедуры. Что-то вроде:

 int departmentId = 1;

List<Employee> employees = (from e in DataContext.Employees
                            //where...
                            select e).ToList();
  

Как мне отформатировать мое предложение where, чтобы получить идентификаторы сотрудников из результирующего набора, которые имеют данный DepartmentID?

Ответ №1:

Как насчет:

 List<spResult> results = DataContext.sp().ToList();

int departmentId = 1;

var departmentEmployees = from de in results
                          where de.DepartmentId == departmentId
                          select de.EmployeeID;

List<Employee> employees = (from e in DataContext.Employees
                            where departmentEmployees.Contains(e.ID)                            
                            select e).ToList();
  

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

1. 1, но я думаю, вам нужно поместить departmentEmployees в массив или List<int>

2. @jeroenh — Я не думаю, что вам нужно это делать в данном случае. Хотя это может быть и неправильно.

Ответ №2:

Вы могли бы получить подмножество ключей:

 var empKeys = results.Where(i => i.DepartmentID = departmentID);
  

А затем используйте этот список в запросе, подобном:

 List<Employee> employees = (from e in DataContext.Employees
                            where empKeys.Contains(e.EmployeeID)
                            select h).ToList();
  

HTH.

Ответ №3:

Вы также должны уметь делать что-то подобное:

 List<Employee> employees = DataContext.Employees.Where(e => empKeys.Contains(e.EmployeeID)).ToList()