繁体   English   中英

LINQ中的表子查询

[英]Table Sub Query in LINQ

如何在LINQ中编写此查询?

我要对Employee表应用子查询,因为我只需要男雇员的所有资格。

Select emp.Name, qual.Name, qual.Description 
from Qualification qual 
INNER JOIN ( Select emp.QualId from Employee emp where emp.Gender='Male') emp
ON qual.Id = emp.QualId 

因此,您有雇员和资格两类。 员工与资格之间存在一对多关系

  • 每个资格有零或更多的员工
  • 每个员工都只有一个资格

如果您遵循默认的实体框架一对多配置,您将拥有类似

class Qualification
{
    public int Id {get; set;}
    public string Name {get; set;}
    public string Description {get; set;}

    // a Qualification has zero or more Employees
    public virtual ICollection<Employee> Employees {get; set;}
}
class Employee
{
    public int Id {get; set;}
    public string Name {get; set;}
    public string Gender {get; set;}

    // Every Employee has exactly one Qualification using foreign key
    public int QualificationId {get; set;}
    public virtual Qualification Qualification {get; set;}
 }

这是实体框架配置一对多关系所需的全部知识。 如果您使用不同的属性名称,则将具有属性或流利的API,以告知Entity Framework其功能。

现在回到您的查询:您想要所有男性雇员的姓名以及其资格的名称和说明

var result = dbContext.Employee
    .Where(employee => employee.Gender == "Male")
    .Select(employee => new
    {
        EmployeeName = employee.Name,
        QualificationName = employee.Qualification.Name,
        QualificationDescription = employee.Qualification.Description,
    });

实体框架将为此创建正确的联接。

暂无
暂无

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

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