1
我已經成功地使用Hierarchical data in Linq - options and performance問題的接受答案來查詢特定記錄/節點的所有後代的分層表。現在我需要找到特定節點是其後代的樹的根。我如何儘可能接近可接受的答案來執行此操作?如何找到使用LINQ和EF的層次結構的根目錄?
層次結構由具有ParentId列的自引用表表示,對於層次結構中的頂級項目,該列爲null。
我已經成功地使用Hierarchical data in Linq - options and performance問題的接受答案來查詢特定記錄/節點的所有後代的分層表。現在我需要找到特定節點是其後代的樹的根。我如何儘可能接近可接受的答案來執行此操作?如何找到使用LINQ和EF的層次結構的根目錄?
層次結構由具有ParentId列的自引用表表示,對於層次結構中的頂級項目,該列爲null。
這是那種東西你正在尋找
CREATE TABLE [dbo].[hierarchical_table](
[id] INT,
[parent_id] INT,
[data] VARCHAR(255)
)
GO
INSERT [dbo].[hierarchical_table]
SELECT 1,NULL,'/1' UNION ALL
SELECT 2,1,'/1/2' UNION ALL
SELECT 3,2,'/1/2/3' UNION ALL
SELECT 4,2,'/1/2/4' UNION ALL
SELECT 5,NULL, '/5' UNION ALL
SELECT 6,5,'/5/6'
GO
CREATE FUNCTION [dbo].[fn_root_for_node]
(
@id int
)
RETURNS TABLE AS
RETURN (
WITH [hierarchy_cte](id, parent_id, data, [Level]) AS
(
SELECT
id,
parent_id,
data,
0 AS [Level]
FROM dbo.hierarchical_table
WHERE id = @id
UNION ALL
SELECT t1.id, t1.parent_id, t1.data, h.[Level] + 1 AS [Level]
FROM dbo.hierarchical_table AS t1
INNER JOIN hierarchy_cte AS h
ON t1.id = h.parent_id
)
SELECT TOP 1
id, parent_id, data, [Level]
FROM [hierarchy_cte]
ORDER BY [Level] DESC
)
GO
SELECT * FROM [dbo].[fn_root_for_node] (6)
GO
點上,下降到代碼的確切行,謝謝。 – ProfK