我如何过滤实体'很多人的导航属性:很多关系

时间:2018-02-12 17:26:05

标签: c# sql-server entity-framework

我有一个Task关系表Many:Many,该关系使用映射表Task_Map和列ParentId&& ChildId。 (任务可以成为更大任务的一部分)

使用EF6,我需要选择:
1.所有父母任务(任何有孩子的任务)
2.过滤没有StatusId Child5

的导航属性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,但我不确定如何选择父任务。

0 个答案:

没有答案