我需要帮助过滤实体框架 (EF) 导航属性上的 LINQ 查询。这些表是首先创建的(不是代码优先的)。
对于这个问题,让我们使用 The Office 中的角色。
假设我有以下表格和列:
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