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; }
黑魔法!谢谢! –
@MKenyonII不客气:) –