EF-запрос с условиями из нескольких таблиц - PullRequest
2 голосов
/ 29 ноября 2010

У меня есть таблица с именем «Сотрудники».ИД сотрудника из этой таблицы МОЖЕТ быть в другой таблице (объединение «многие ко многим») с именем «Задачи».Другое поле в таблице «Задачи» - это идентификатор задачи, связанный с таблицей «Задачи».В этой таблице содержатся такие сведения, как budgetHours.

Используя EF4, как написать оператор WHERE, чтобы возвращение служащих назначалось задачам, где budgetHours> 120 часов?в следующих строках лимитов в таблице «Сотрудники», но теперь мне нужно добавить условия в таблицу TaskDetails.

var assocOrg = Employees.Where(x => x.EmployeeTypeID == 2 && x.DepartmentName == "ABC").Select (x => x.EmployeeID);

Спасибо!

Ответы [ 3 ]

4 голосов
/ 30 ноября 2010

Если у сотрудников есть свойство навигации с именем Tasks, попробуйте следующее:

var assocOrg = Employees.Where(x => x.EmployeeTypeID == 2 && 
                                    x.DepartmentName == "ABC" &&
                                    x.Tasks.Any(t => t.BudgetHours > 120))
                        .Select (x => x.EmployeeID);
1 голос
/ 03 июля 2012

Если вы используете следующую структуру таблицы,

TableName            Employee  Task               TaskDetails
ReferenceKeys        EmpID     EmpdID/TaskID      TaskID/BudgetHours

затем используйте,

Employee.Where(x => x.Task.EmpID == x.EmpID && x.Task.TaskDetails.TaskID == x.Task.TaskID && x.Task.TaskDetails.BudgetHours > 120).select(x => x.EmpID)
0 голосов
/ 30 ноября 2010

Предполагая, что у вас есть Tasks свойство навигации для объекта Employee, это должно быть просто:

var assocOrg = Employees.Where(x => x.Tasks.Any(t => t.BudgetHours > 120) && x.DepartmentName == "ABC").Select (x => x.EmployeeID);

Конечно, для этого необходимо, чтобы свойство Tasks было разрешено на этом этапе, либо явночерез ленивую загрузку или с .Include().

(спасибо @adrift за правильное получение Tasks.Any () ... упс.)

...