C#实体框架递归层次结构查询

时间:2018-09-02 15:52:15

标签: c# sql-server entity-framework entity-framework-6

为了说明这个问题,我将首先展示我的情况-我在SQL Server中创建了一个角色和任务架构,如下所示:

enter image description here

我有2个主表,def ordered_search(index, ranks, keyword): x = index[keyword] return order(x, ranks) def order(x, ranks): if len(x)<2 or not x: return x else: l = [] r = [] for y in x: if ranks[y] > ranks[x[0]]: l.append(y) else: r.append(y) return order(l, ranks) + order(r,ranks)` Roles,还有2个链接表。

我已经使用C#在Entity Framework类中生成了该模型(使用Entity Framework生成器),并且得到了这些类:

Tasks

现在,我想获取一个角色的所有任务名称,但由于任务具有自我层次结构,我遇到了麻烦。

我可以使用实体框架来执行此操作,而无需手动遍历每个子级/ SQL Server存储过程吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在LazyLoading的帮助下进行递归操作:

public List<string> GetTaskNames(Task task, List<string> tasks = null)
{
    if(tasks == null);
        tasks = new List<string>();
    tasks.Add(task.Name);

    foreach(var child in task.ChildTask)
       GetTaskNames(child, tasks);

    return tasks;
}

var role = context.Roles.Find(roleId);
var names = role.Tasks.SelectMany(x => GetTaskNames(x)).Distinct().ToList();