#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()