[英]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.