我有一个Task
关系表Many:Many
,该关系使用映射表Task_Map
和列ParentId
&& ChildId
。 (任务可以成为更大任务的一部分)
使用EF6,我需要选择:
1.所有父母任务(任何有孩子的任务)
2.过滤没有StatusId Child
或5
6
SELECT TOP (100) PERCENT
Task_1.Description AS ParentTask,
dbo.Task.Description AS ChildTask
FROM dbo.Task AS Task_1
LEFT OUTER JOIN dbo.Task_Map
ON Task_1.Id = dbo.Task_Map.Parent_Id
LEFT OUTER JOIN dbo.Task
ON dbo.Task_Map.Child_Id = dbo.Task.Id
WHERE (dbo.Task.Description IS NOT NULL)
ORDER BY ParentTask
我有这个SQL查询返回我期望的结果。
var query = context.Task
.Include(w => w.Category)
.Include(w => w.SubCategory)
.Include(w => w.Status)
.Include(w => w.Priority)
.Include(w => w.User)
.Include(w => w.Child.Select(a => a.Category))
.Include(w => w.Child.Select(a => a.Status))
.Where(n => n.Child.Any())
.ToList();
此代码返回:
1.带孩子的所有任务。 (如预期的那样)
但它会返回所有儿童任务。 (代码按预期工作,而不是我想要的结果。)
I came across this answer and the query below
var query = context.Task
.Where(w => w.Child.Any())
.SelectMany(x => x.Child.Where(c => !done.Contains(c.StatusId)).Select(c => c))
.Include(w => w.Category)
.Include(w => w.SubCategory)
.Include(w => w.Status)
.Include(w => w.Priority)
.Include(w => w.User)
.Include(w => w.Child.Select(a => a.Category))
.Include(w => w.Child.Select(a => a.Status))
.ToList();
我能够使用该问题的答案,但我无法按原样使用它,这意味着它所说的部分.Select(c => c.Product).Distinct()
,我无法用{{替换} 1}}所以我只选择.Select(c => c.Child).Distinct()
。
此查询选择符合我的条件的所有子任务,但它们不是父任务的导航属性,它只是子任务列表。
我假设我需要更改的部分是c
,但我不确定如何选择父任务。