我的工作表与我的JobTag表有一对多的关系。
特定作业的数据有很多JobTag记录。
但是这个查询没有填充JobTags。
var query = from j in context.job.AsNoTracking().Include(j => j.JobTag)
join i in context.MYEXTItem on j.ItemID equals i.ItemID
where j.HeadID == orderId && i.TemplateID == 50
select new { Job = j, Item = i };
var jobitems = query.ToArray();
var job1 = jobitems[0];
var num = job1.Job.JobTag.Count; // is Zero why?
即使作业存在JobTags,num也会返回零。
我做错了什么?
答案 0 :(得分:1)
你可以做这样的事情
var details = from j in db.Jobs
join t in db.JobTags on j.Id equals t.JobId
select new
{
Job = j,
Tag = t,
};
// if you want to get the list of jobs only
var jobs = (from j in details
select j).Distinct();
// if you want to get the counts
var count = from d in details
group d by d.Job into g
select new
{
Job = g.Key,
TagCounts = g.Count()
};
希望这会对你有所帮助
答案 1 :(得分:1)
请参阅this。
在Include
和进行投影后,您都在更改查询的形状。并不是说这更加明显。我认为这个“丢失包含问题”非常违反直觉。
无论如何,我们必须忍受它。在你的情况下,你可以做一些像......
select new { Job = j, Tags = j.JobTag, Item = i }
......或者如果你只对这些计数感兴趣......
select new { Job = j, TagsCount = j.JobTag.Count(), Item = i }
...并删除Include
。