簡體   English   中英

實體框架通過相關實體查詢

[英]Entity Framework querying by related entity

我有 2 個實體,工作和約會:

public class Job
{
    public int JobId { get; set; }
    public ICollection<Appointment> Appointments { get; set; }
}

public class Appointment
{
    [Key]
    public int AppointmentId { get; set; }

    [Required]
    public DateTime AppointmentDate { get; set; }

    [Required]
    [MaxLength(50)]
    public string Type { get; set; }

    public int Job_JobId { get; set; }

    [ForeignKey("Job_JobId")]
    public virtual Job Job { get; set; }
}

如何僅返回具有“初始”約會類型的工作?

類似於以下內容(這不是有效的語法):

jobs = jobs.Where(x => x.Appointments.Where(p => p.Type == "Initial"));

我相信您正在尋找Any()來引入一項條件,即一項工作必須至少有一個“初始”類型的約會,即:

var initialJobs = jobs
    .Where(j => j.Appointments.Any(a => a.Type == "Initial"));

Where需要一個謂詞參數(Func 返回一個 bool),如果至少有一個元素滿足內部謂詞( a.Type == "Initial" ),則Any()返回 true

如果您只想加載類型為 Initial 的工作的約會,您也可以這樣做:

var jobs = appointments.Where(x => x.Type == "Initial").Select(x => x.Job);

這應該在只有初始類型的作業中為您提供約會。

如果你想返回工作列表,只要列表包含至少一個Type == "Initial" ,你應該使用Any() ,你的情況看起來像這樣

var jobs = jobs.Where(x => x.Appointments.Any(p => p.Type == "Initial"));

或者,如果它包含Type == "Initial"所有約會,則返回工作,您可以使用Where()

var jobs = jobs.Where(x => 
{
   var appointmentCount = x.Appointments.Count();
   var validAppointments = x.Appointments.Where(p => p.Type == "Initial");

   return  appointmentCount  == validAppointments.Count();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM