如何在SQL Server中创建递归关联并在C#with Entity Framework中循环它?

如何在SQL Server中创建递归关联并在C#with Entity Framework中循环它?,c#,database,entity-framework,recursion,C#,Database,Entity Framework,Recursion,我正在尝试为一个问题库设计一个数据库结构,然后是一个可以显示该问题库的应用程序 在我的数据库中,有一个名为Category的实体表。每个类别可以有多个子类别,每个子类别可以有多个子类别等。这是一个递归关联 目前,我将其设计如下: [Table: Category] category_id category_number category_name parrent_id [Table: Question] question_id question_number question_wording

我正在尝试为一个问题库设计一个数据库结构,然后是一个可以显示该问题库的应用程序

在我的数据库中,有一个名为Category的实体表。每个类别可以有多个子类别,每个子类别可以有多个子类别等。这是一个递归关联

目前,我将其设计如下:

[Table: Category]
category_id
category_number
category_name
parrent_id

[Table: Question]
question_id
question_number
question_wording
question_category
一个具体的例子是:

- Categories

category_id = 1
category_number = 1
category_name = Milk Products
parret_id = null

category_id = 2
category_number = 1.1
category_name = Cheese
parent_id = 1

category_id = 3
category_number = 1.1.1
category_name = Soft
parrent_id = 2

- Questions

question_id = 1
question_number = 1
question_wording = "From 1-5, how much do you like soft cheese?"
category_id = 3

question_id = 2
question_number = 1
question_wording = "How much do you like cheese?"
category_id = 2
我如何循环浏览类别并显示每个类别和问题,如下所示:

Questionnarie
- Milk products
-- Cheese
-- "How much do you like cheese?"
--- Soft-Cheese
--- "From 1-5, how much do you like soft cheese?"
我正在使用实体框架将数据库加载到c中#


提前谢谢

您可以像使用普通C#代码一样执行此操作。您可以进行递归函数调用:

public IEnumerable<Category> GetSubCategoriesFor(int catId)
{
    var subs = db.Categories.Where(c => c.ParentId == catId);

    foreach (var sub in subs)
    {
        yield return sub;

        // Recursive call
        foreach (var subsub in GetSubCategoriesFor(sub.Id))
        {
            yield return subsub;
        }
    }
}
public IEnumerable GetSubcategories for(int catId)
{
var subs=db.Categories.Where(c=>c.ParentId==catId);
foreach(子系统中的var子系统)
{
收益率分包;
//递归调用
foreach(GetSubCategoriesFor(sub.Id))中的var子类)
{
收益子项;
}
}
}