我需要帮助过滤实体框架(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
使用“从数据库更新模型”将这些表引入EF Visual Studio中的功能。
所有实体的名称与表名完全相同,实体集也是如此 多元化的。
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