C#Entity Framework递归层次结构查询

问题描述 投票:1回答:1

我将首先展示我的案例以解释这个问题 - 我在SQL Server中创建了一个角色和任务架构,如下所示:

enter image description here

我有2个主要表,RolesTasks,以及2个链接表。

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

public class Task
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Role> Roles { get; set; }
    public virtual ICollection<Task> ChildTask { get; set; }
    public virtual ICollection<Task> ParentTask { get; set; }
}

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Task> Tasks { get; set; }
}

现在我想得到一个角色的所有任务名称,我遇到了麻烦,因为任务有自己的层次结构。

我可以使用实体框架并且无需手动遍历每个子项/ SQL Server存储过程吗?

谢谢。

c# sql-server entity-framework entity-framework-6
1个回答
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();
© www.soinside.com 2019 - 2024. All rights reserved.