簡體   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