簡體   English   中英

LINQ - 在父子層次結構中選擇全部

[英]LINQ - Select all in parent-child hierarchy

我想知道是否有一個簡潔的方法做到這一點,不要使用任何類型的while循環或類似的,最好是針對Linq to Entities作為單個SQL往返運行,並且還針對Linq To Objects。

我有一個實體 - Forum - 正在進行親子關系。 也就是說, Forum可以(或者在頂層的情況下,可能沒有)擁有ParentForum ,並且可能有許多ChildForums Forum然后包含許多Posts

我在這里得到的是一種從Forums樹中獲取所有Posts的方法 - 即有問題的Forum ,以及它的所有孩子,孫子等等。我事先並不知道Forum多少子級別可能有。

(注意 - 我知道這個例子不一定是一個有價值的用例,但是Forum對象模型是大多數人都熟悉的,因此可以作為一個通用的,可訪問的前提而不是我的實際域模型。)

一種可能的方法是使用左/右樹存儲您的實際數據表(例如: http//www.sitepoint.com/hierarchical-data-database-2/ 。注意,該示例在MySQL / PHP中,但實施起來很簡單)。 使用此功能,您可以找到屬於父級左/右值的所有論壇,並且您可以檢索所有論壇ID IN這些論壇ID中的帖子。

我相信你可能會得到一些關於Linq查詢的正確答案。 當談到SQL方面時,我發布這個作為建議。

我在SQL中遇到了與虛擬文件系統類似的問題。 我需要能夠遞歸地查詢文件夾中的文件 - 當然,文件夾具有遞歸的父子關系。 我還需要快速,我當然不希望退回到客戶端處理。

為了性能,我最終編寫了存儲過程和內聯函數 - 遺憾的是,這里發布的內容太復雜了(我可能會因為共享公司代碼而煩惱!)。 然而,關鍵是學習如何使用遞歸CTE http://msdn.microsoft.com/en-us/library/ms186243.aspx 我花了幾天時間來指出它,但性能令人難以置信(盡管它們很容易出錯 - 所以要注意查詢計划)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM