如何解决通过LINQ获取层次结构中的所有子级
我有3张桌子
- 类别(主要),具有rootId
- ChildCategory,也具有rootId
- 类别和ChildCategory之间的Category_ChildCategory(n-n) 所以我有数据
Category
-----------------
ID ParrentId
1 NULL
2 1
3 2
4 NULL
5 NULL
6 NULL
ChildCategory
---------------------
ChildId ChildParentId
1 NULL
2 NULL
3 2
4 NULL
5 NULL
Category_ChildCategory
---------------------------
CategoryId ChildCategoryId
1 1
1 2
2 3
因此,如果我们选择ID = 1的“类别” 结果将是
Category: 1,2,3
ChildCategory: 1,3
因为类别1的孩子(rootId = 1)为category_2-与它同级别,类别2的孩子为childCategory)3 并且category_1有2个子类别,分别是childCategory_1和childCategory_2
如果我们选择childCategory 2,那么结果将是 类别:NaN 子类别:2,3
解决方法
感谢所有关心我的问题的人! 我已经通过使用SQL CTE查询解决了此问题,其中2个CTE用于类别,一个用于CategoryChild
这是我的代码
类别CTE
;WITH categoryCTE AS
(
SELECT a.CATEGORY_ID,a.CATEGORY_ROOT_ID
FROM CATEGORY a
WHERE CATEGORY_ID = @CATEGORY_ID
UNION ALL
SELECT a.CATEGORY_ID,a.CATEGORY_ROOT_ID
FROM CATEGORY a JOIN categoryCTE c ON a.CATEGORY_ROOT_ID = c.CATEGORY_ID
),childCategoryCTE AS (
SELECT a.CHILD_CATEGORY_ID,a.CHILD_CATEGORY_ROOT_ID
FROM CHILD_CATEGORY a
WHERE CHILD_CATEGORY_ID IN (select CHILD_CATEGORY_ID from CATEGORY_CHILD_CATEGORY
WHERE CATEGORY_ID = @CATEGORY_ID)
UNION ALL
SELECT a.CHILD_CATEGORY_ID,a.CHILD_CATEGORY_ROOT_ID
FROM CHILD_CATEGORY a JOIN childCategoryCTE c ON a.CHILD_CATEGORY_ROOT_ID = c.CHILD_CATEGORY_ID
)
ChildCategory CTE
;WITH childCategoryCTE AS (
SELECT a.CHILD_CATEGORY_ID,a.CHILD_CATEGORY_ROOT_ID
FROM CHILD_CATEGORY a
WHERE CHILD_CATEGORY_ID = @CHILD_CATEGORY_ID
UNION ALL
SELECT a.CHILD_CATEGORY_ID,a.CHILD_CATEGORY_ROOT_ID
FROM CHILD_CATEGORY a JOIN childCategoryCTE c ON a.CHILD_CATEGORY_ROOT_ID = c.CHILD_CATEGORY_ID
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。