linq to entities 查询结果遗漏子记录
linq to entities query result misses child records
我的工作 table 与我的 JobTag table 具有一对多关系。
特定工作的数据有很多 JobTag 记录。
但是此查询未填充 JobTag。
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?
num returns 即使作业存在 JobTags 也为零。
我做错了什么?
你可以这样做
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()
};
希望对您有所帮助
参见 。
在 Include
和 获得投影后,你们都在更改查询的形状。并不是说这使它更明显。我认为这个 "lost Include problem" 非常违反直觉。
无论如何,我们必须忍受它。在您的情况下,您可以做类似...
select new { Job = j, Tags = j.JobTag, Item = i }
...或者如果您只对计数感兴趣...
select new { Job = j, TagsCount = j.JobTag.Count(), Item = i }
...并删除 Include
.
我的工作 table 与我的 JobTag table 具有一对多关系。
特定工作的数据有很多 JobTag 记录。
但是此查询未填充 JobTag。
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?
num returns 即使作业存在 JobTags 也为零。
我做错了什么?
你可以这样做
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()
};
希望对您有所帮助
参见
在 Include
和 获得投影后,你们都在更改查询的形状。并不是说这使它更明显。我认为这个 "lost Include problem" 非常违反直觉。
无论如何,我们必须忍受它。在您的情况下,您可以做类似...
select new { Job = j, Tags = j.JobTag, Item = i }
...或者如果您只对计数感兴趣...
select new { Job = j, TagsCount = j.JobTag.Count(), Item = i }
...并删除 Include
.