繁体   English   中英

需要帮助使用实体框架导航属性过滤LINQ查询

[英]Need Help Filtering A LINQ Query Using An Entity Framework Navigation Property

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

对于这个问题,让我们使用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

您可以使用WhereAny方法轻松完成此操作:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM