我需要帮助在Entity Framework(EF)导航属性上过滤LINQ查询。表是先创建的(不是代码优先)。
针对这个问题,我们使用《办公室》中的角色。
假设我有以下表和列:
Offices
Id
Name
Location
Employees
Id
Name
EmployeeTypes
Id
Description
Employees_EmployeeTypes
Id
EmployeeId
EmployeeTypeId
表格中包含以下数据:
Offices
1 North Branch PA
2 South Branch FL
3 East Branch NY
Employees
1 Jim
2 Pam
3 Oscar
4 Dwight
5 Michael
6 Angela
7 Kevin
8 Stanley
EmployeeTypes
1 Manager
2 Salesman
3 Assistant
4 Receptionist
5 Accountant
Employees_EmployeeTypes
1 1 2
2 2 4
3 3 5
4 4 2
5 5 1
6 6 5
7 7 5
8 8 2
使用Visual Studio中的“从数据库更新模型”功能将这些表导入EF。
所有实体都与表名完全相同,实体集是复数形式。
Entity Name Entity Set Name
Office Offices
Employee Employees
EmployeeType EmployeeTypes
Employees_EmployeeTypes表是一个连接表(多对多),在EF中将被翻译成导航属性,并命名为“EmployeeTypes”。以下是其使用示例:
var employeeTypes = dbContext.Employees.Find(1).EmployeeTypes;
既然我们已经设置好了,那么让我们来看看问题。使用LINQ,我如何选择所有通过导航属性“EmployeeTypes”是销售员的员工?在SQL中,它看起来像这样:
select e.Id, e.Name
from Employees e
join Employees_EmployeeTypes e_et on e_et.EmployeeId = e.Id
join EmployeeTypes et on et.Id = e_et.EmployeeTypeId
where et.Id = 2