gpt4 book ai didi

c# - 需要一种从具有层次结构数据的表中获取记录 ID 的方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:18 24 4
gpt4 key购买 nike

我需要一些帮助来从表中获取记录 ID。基本上,我正在处理将特定路径的文件夹和文件存储在数据库中的项目。

它包括桌面和 Windows 服务应用程序,我使用 SDF 文件作为数据库并使用 C# 使用 ADO.NET 处理数据操作

这是我的文件夹表 enter image description here

如您所见,它是一个层次结构表,FolderId 是一个标识列。

现在假设我的数据是

data

我的路径为“E:\Books\WCF\Examples.pdf”。现在如何从上表中获取“Examples.pdf”文件的 FolderId。

我想出了以下方法

方法一:通过编写递归方法从文件夹表中获取与文件夹名称“WCF”匹配的所有记录及其完整层次结构。所以我会得到以下数据 enter image description here

现在在我的代码中,我将比较此层次结构列与 pdf 的上述文件夹路径以获取 FolderId。

方法 2:从 pdf 路径中获取每个文件夹,我将生成看起来像这样的动态查询

select FolderId from Folders where Name='WCF' and
ParentFolderId in (select FolderId from Folders where Name='Books' and
ParentFolderId in (select FolderId from Folders where Name='E:'))

根据我的两种方法,我应该更喜欢哪一种。性能是一个关键因素,文件夹表可能有超过一百万条记录。欢迎提出任何更好的方法。

最佳答案

测试数据

CREATE TABLE Table_Name50
(ID INT, Name nvarchar(100), ParentID INT)
GO

INSERT INTO Table_Name50(ID, Name,ParentID)
VALUES
( 1 ,N'E:\',NULL),
( 2, N'Books', 1),
( 3, N'History', 2),
( 4, N'Biology', 2),
( 5, N'Vidoes', 1)
GO

查询

获取给定ID的完整路径

DECLARE @ID INT = 3

;with CompleteData
as
(
Select ID, ParentId from Table_Name50
UNION
Select Child.ParentID Id, Parent.ParentID ParentId From Table_Name50 Child
Left Outer Join Table_Name50 Parent
on Child.ParentID = parent.ID
WHERE
parent.ParentID IS NULL

),
ChildHierarchyData(ID,ParentID, Level)
as
(
Select ID,ParentID, 0 as Level from CompleteData Where ID = @ID --<-- Your Parameter
union all
Select CompleteData.ID, CompleteData.ParentID, ChildHierarchyData.Level +1 from CompleteData
INNER Join ChildHierarchyData
on ChildHierarchyData.ParentID = CompleteData.ID
),
Concatinated(result)
as
(
Select Cast((select Cast(Name as nvarchar) + '\' [data()]
from ChildHierarchyData CD INNER JOIN Table_Name50 tbl
ON CD.ID = tbl.ID
Order By Level Desc
FOR XML Path('')) as Nvarchar(max))
)
select Left(result, len(result)-1) as Result from Concatinated

结果

E:\\ Books\ History

关于c# - 需要一种从具有层次结构数据的表中获取记录 ID 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com