LinqToSql不支持任意深度的步行樹木。您應該使用TSQL While循環編寫一個sql函數來生成結果,並從linqtosql調用該函數。
喜歡的東西:
DECLARE @MyNodeID int
SET @MyNodeID = 42
-- we're looking for the path from this ID back up to the root
-- we don't know the length of the path.
DECLARE @MyTable TABLE
(
int ID PRIMARY KEY,
int ParentID,
)
DECLARE @ID int
DECLARE @ParentID int
SELECT @ID = ID, @ParentId = ParentId
FROM MyRecursiveObject
WHERE ID = @MyNodeID
WHILE @ID is not null
BEGIN
INSERT INTO @MyTable (ID, ParentID) SELECT @ID, @ParentID
SET @ID = null
SELECT @ID = ID, @ParentId = ParentID
FROM MyRecursiveObject
WHERE ID = @ParentID
END
SELECT ID, ParentID FROM @MyTable --results
是否使用LINQ到SQL或LINQ到實體或只是什麼是最快的? – 2013-03-04 15:59:06
如果您在數據庫派生數據和SQL Server 2008+上使用linq,那麼值得查看hierarchyid:http://msdn.microsoft.com/en-us/library/bb677290.aspx。 – Oliver 2013-03-04 16:00:54
我正在尋找兩個實際!有時我們正在DAL中處理這個問題,有時在邏輯層中處理這個問題。 – 2013-03-04 16:01:23