[英]Entity Framework Include Single Object from One-To-Many Relationship
我正在嘗試構建一個單一的查詢來獲取所有Tour對象的列表,每個tour的最新版本都是預先加載的(最近一次是最近創建的)。 請參閱以下型號。 每個Tour
都可以有多個相關的TourVersion
對象
class Tour {
public Guid TourId { get; set; }
public virtual TourVersion CurrentTourVersion { get; set; }
// Other properties etc.
}
class TourVersion {
public Guid TourId { get; set; }
public DateTime CreatedOn { get; set; }
// Other properties etc.
}
我能夠完成我想要為每個Tour
運行另一個查詢:
var tours = context.Tours.ToList();
foreach (var tour in tours)
{
tour.CurrentTourVersion = context.TourVersions
.Where(t => t.TourId == tour.Id)
// ToUnixTime is a custom extension method that returns a long
.OrderByDescending(t => t.CreatedOn.ToUnixTime())
.FirstOrDefault();
}
我希望能夠在一個查詢中完成此任務。 有什么建議么?
實體框架會自動為您加載相關實體,直到上下文處於活動狀態。 你得到了Tours的列表
var tours = dbContext.Tours.ToList();
例如,你可以通過調用獲得巡演版本
tours[i].CurrentTourVersion;
除非在獲得游覽版本之前將dbContext放置在某個地方,否則您將需要急切加載(請參閱此處 )。 這樣您就可以獲得並保留相關對象。
var tours = dbContext.Tours.Include(obj=>obj.CurrentTourVersion).ToList();
結束解決它:
var tours = (from tour in context.Tours
join v in context.TourVersions on tour.TourId equals v.TourId
where v.CreatedOn == context.TourVersions.Select(b => b.CreatedOn).Max()
select new
{
TourId = tour.Id,
CurrentTourVersion = v
}).ToList().Select(tour => new Tour
{
TourId = tour.Id,
CurrentTourVersion = tour.CurrentTourVersion
});
return tours.ToList();
解釋為什么這有效:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.