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