Linq查询以包含连接对象上的项目

问题描述:

我想要使用包含子对象的Linq查询来获取对象的集合。我可以在主表上做一个包含并获得结果。但是,如果我在我加入的其中一个表上进行include操作,我不会收到include应该返回的对象。Linq查询以包含连接对象上的项目

这里是我的模型:

public class RequestReviewViewModel 
{ 
    public Guid RequestId { get; set; } 
    public Guid ResourceToReviewId { get; set; } 
    public Guid ReviewRequiredId { get; set; } 
    public ReviewRequired ReviewRequired { get; set; } 
} 

public class Required : BaseEntity 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public Guid RequiredId { get; set; } 

    [Display(Name = "Review Name")] 
    public int ReviewNameId { get; set; } 
    [ForeignKey("ReviewNameId")] 
    public ReviewName ReviewName { get; set; } 
} 

这里的LINQ查询我正在努力。似乎Required.Include(revr => revr.ReviewName)也不行做任何事情:

var requests = (from req in Request.Include(rr => rr.Resource) 
    join revreq in Required.Include(revr => revr.ReviewName) 
     on req.ReviewRequiredId equals revreq.RequiredId 
    where req.IsActive 
    select new RequestReviewViewModel 
    { 
     RequestId = req.RequestId, 
     ResourceToReviewId = req.ResourceToReviewId, 
     ReviewRequiredId = req.ReviewRequiredId, 
     Required = revreq 
    }; 

requests.FirstOrDefault().Required.ReviewName.Dump(); 

虽然requests.FirstOrDefault().Required.ReviewNameId有一个值,该ReviewName对象为null。该关系在数据库中,由Code First创建。

您的ReviewName没有声明virtual它使启动/延迟加载(和自动更改跟踪完成)。添加virtual,它应该工作:

public virtual ReviewName ReviewName { get; set; } 
+0

黑魔法!谢谢! –

+0

@MKenyonII不客气:) –