C# 递归选择父级(对于ACL/权限系统) 重要的事情

C# 递归选择父级(对于ACL/权限系统) 重要的事情,c#,sql-server,linq,entity-framework,C#,Sql Server,Linq,Entity Framework,型号类别: 现在的问题是。。。 我如何使用像 用一个像 我想递归地选择一个包含所有父对象的类别。 如果有一个LINQ查询,那就太好了 预期结果如下: 还是和一群人一起 上面的分类系统是一个更大计划的示例…: 是否有一个框架/nuget插件允许对存储在数据库中的对象使用ACL/权限/权限? 我有用户和组。然后我有文件夹和文件。每个用户或组都可以拥有特定文件夹或文件的权限。您可以为文件或文件夹权限启用遗传。通过这个查询,我尝试读取一个用户的所有权限和一个特定文件夹,以及他们的所有家长 试试这个查询

型号类别:

现在的问题是。。。 我如何使用像

用一个像

我想递归地选择一个包含所有父对象的类别。 如果有一个LINQ查询,那就太好了

预期结果如下:

还是和一群人一起

上面的分类系统是一个更大计划的示例…:

是否有一个框架/nuget插件允许对存储在数据库中的对象使用ACL/权限/权限? 我有用户和组。然后我有文件夹和文件。每个用户或组都可以拥有特定文件夹或文件的权限。您可以为文件或文件夹权限启用遗传。通过这个查询,我尝试读取一个用户的所有权限和一个特定文件夹,以及他们的所有家长

试试这个查询

 var result = 
        from first in db.Category
        join second in db.Category on first.Id equals second.ParentId.GetValueOrDefault(0) 
        where first.name.Contains(parameter)
        select new
        { 
            Id = first.Id , 
            ParentId= second.ParentId ?? 0, 
            ParentName= second.Name
        };

我使用了second.ParentId.GetValueOrDefault0,因为连接是在两种不同的类型int和nullable of int上进行的

我编辑了您的标题。请看,如果共识是否定的,他们就不应该这样做。这是行不通的。我没有递归。您的查询只选择两个条目。如果有人找猫怎么办?然后查询应该选择数据库的所有条目,因为所有条目都匹配%Cat%。但是谢谢。也许你知道一个递归查询。我想选择一个类别中的所有孩子。例如,所有儿童的主要类别及其儿童的儿童和儿童的儿童的儿童等。。。。
---------------------------------
| Id | Parent | Name            |
---------------------------------
|  1 |   NULL | Top Category    |
---------------------------------
|  2 |    1   | Second Category |
---------------------------------
|  3 |    2   | Third Category  |
---------------------------------
|  4 |    3   | Fifth Category  |
---------------------------------
SELECT "Name" FROM "Category" WHERE "Parent" IS NULL;
SELECT "c"."Id", "c"."Parent", "p"."Name" FROM "Category" "c" LEFT JOIN "Category" "p" ON "p"."Id" = "c"."Parent" WHERE "c"."Name" LIKE '%d%';
----------------------------------------------
| "c"."Id" | "c"."Parent" | "p"."Name"       |
----------------------------------------------
|    2     |    1         | Top Category     |
----------------------------------------------
|    3     |    2         | Second Category  |
----------------------------------------------
-----------------------------------------------------------
| "c"."Id" | "c"."Parent" | GROUP_CONCAT(...)             |
-----------------------------------------------------------
|     2, 3 |         1, 2 | Top Category, Second Category |
-----------------------------------------------------------
 var result = 
        from first in db.Category
        join second in db.Category on first.Id equals second.ParentId.GetValueOrDefault(0) 
        where first.name.Contains(parameter)
        select new
        { 
            Id = first.Id , 
            ParentId= second.ParentId ?? 0, 
            ParentName= second.Name
        };