linq to entities查询结果未命中子记录

时间:2015-07-16 06:13:31

标签: entity-framework linq-to-entities

我的工作表与我的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也会返回零。

我做错了什么?

2 个答案:

答案 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