Hal*_*yon 3 c# sql linq entity-framework
我需要帮助过滤实体框架(EF)导航属性上的LINQ查询.首先创建表(不是代码优先).
对于这个问题,让我们使用Office中的字符.
假设我有以下表格和列:
Offices
Id
Name
Location
Employees
Id
Name
EmployeeTypes
Id
Description
Employees_EmployeeTypes
Id
EmployeeId
EmployeeTypeId
Run Code Online (Sandbox Code Playgroud)
表格包含以下数据:
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
Run Code Online (Sandbox Code Playgroud)
使用Visual Studio中的"从数据库更新模型"功能将这些表引入EF.
所有实体的名称与表名完全相同,实体集也是多元化的.
Entity Name Entity Set Name
Office Offices
Employee Employees
EmployeeType EmployeeTypes
Run Code Online (Sandbox Code Playgroud)
Employees_EmployeeTypes表是一个联结表(多对多),将转换为EF中的导航属性,并命名为"EmployeeTypes".以下是其用法示例:
var employeeTypes = dbContext.Employees.Find(1).EmployeeTypes;
Run Code Online (Sandbox Code Playgroud)
现在我们有了设置,让我们来看看问题.使用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
Run Code Online (Sandbox Code Playgroud)
var results = dbContext.Employees.Where(e => e.EmployeeTypes.Any(et => et.Id == 2));
Run Code Online (Sandbox Code Playgroud)
或者如果您更喜欢查询语法:
var results =
from e in dbContext.Employees
where e.EmployeeTypes.Any(et => et.Id == 2)
select e;
Run Code Online (Sandbox Code Playgroud)