gpt4 book ai didi

c# - 需要帮助使用 Entity Framework 导航属性过滤 LINQ 查询

转载 作者:行者123 更新时间:2023-11-30 14:33:10 26 4
gpt4 key购买 nike

我需要帮助过滤 Entity Framework (EF) 导航上的 LINQ 查询属性(property)。首先创建表(不是代码优先)。

对于这个问题,让我们使用办公室中的字符。

假设我有以下表格和列:

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

使用“从数据库更新模型”将这些表带入 EFVisual Studio 中的功能。

所有实体的命名都与表名完全一样,实体集是多元化。

Entity Name     Entity Set Name
Office Offices
Employee Employees
EmployeeType EmployeeTypes

Employees_EmployeeTypes 表是一个联结表(多对多),将转换为 EF 中的导航属性并命名为“EmployeeTypes”。这是其用法示例:

var employeeTypes = dbContext.Employees.Find(1).EmployeeTypes;

现在我们已经设置好了,让我们开始讨论问题吧。使用 LINQ,我怎样才能使用导航属性选择所有销售员员工“员工类型”?在 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

最佳答案

您可以使用 Where 轻松完成此操作和 Any方法:

var results = dbContext.Employees.Where(e => e.EmployeeTypes.Any(et => et.Id == 2));

或者如果您更喜欢查询语法:

var results =
from e in dbContext.Employees
where e.EmployeeTypes.Any(et => et.Id == 2)
select e;

关于c# - 需要帮助使用 Entity Framework 导航属性过滤 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com