我有兩列,groupId和的ParentId(均爲GUID)的一個表。該表形成一個層次結構,因此我可以在「GroupId」字段中查找值,當我找到它時,我可以查看它的ParentId。此ParentId也將出現在不同記錄的GroupId中。我可以使用它從任何點到根(root是一個空的GUID)遍歷層次結構樹。當我知道一個GroupId時,我想要做的是獲取記錄列表。這將是GroupId和所有父母回到根記錄的記錄。 Linq有可能嗎?如果有的話,任何人都可以提供代碼片段嗎?散步層次結構表使用LINQ
3
A
回答
5
LINQ是不是設計來處理遞歸選擇。
當然可以編寫自己的擴展方法,爲在LINQ到補償對象,但我發現,LINQ到實體不喜歡的功能並不容易轉換成SQL。
編輯: 有趣的是,LINQ到實體不抱怨馬特·沃倫的採取上使用LINQ here遞歸。你可以這樣做:
var result = db.Table.Where(item => item.GroupId == 5)
.Traverse(item => db.Table.Where(parent
=> item.ParentId == parent.GroupId));
使用這裏定義的擴展方法:
static class LinqExtensions
{
public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source,
Func<T,IEnumerable<T>> selector){
foreach(T item in source){
yield return item;
IEnumerable<T> children = selector(item);
foreach (T child in children.Traverse(selector))
{
yield return child;
}
}
}
服務表現可能不佳,但。
1
它使用LINQ絕對有可能的,但你必須做一個DB呼籲在層級結構中每個級別。不完全最佳。
0
其他受訪者是正確的 - 表現將是對這個非常糟糕的,因爲你必須做出多次往返。然而,這將取決於您的具體情況 - 例如,您的樹很深並且會經常執行此操作。
您可以創建存儲過程,這是否(使用CTE),並且包裝它在實體設計來回報您的特別定義的實體得到更好的服務。
相關問題
- 1. 使用Linq構建樹層次結構
- 2. 使用Linq創建層次結構
- 3. 使用Makefile逐步構建Docker圖像層次結構
- 4. 層次結構
- 5. 使用LINQ在JSON中創建樹層次結構
- 6. PHP調用層次結構
- 7. radgridview層次結構
- 8. UIView層次結構
- 9. 類層次結構
- 10. 層次結構在SQL Server - 多層次
- 11. 使用表格構建層次結構 - PHP
- 12. PHP OOP使用對象層次結構
- 13. 如何使用RPG類層次結構?
- 14. 使用Firebug顯示DOM層次結構
- 15. 使用SCOPE MDX聚合層次結構
- 16. 使用jquery重排div層次結構
- 17. 使用knockoutjs顯示層次結構(樹)
- 18. 如何使用每個類層次結構策略的表來管理nhibernate中的多級類層次結構?
- 19. 平面列表到層次結構
- 20. Mutltiple表中的報告層次結構
- 21. XSLT扁平列表樹層次結構
- 22. 表示標識符層次結構 - java
- 23. 類表繼承與層次結構
- 24. 跟蹤表中的層次結構
- 25. 從表中選擇層次結構
- 26. 如何建模表層次結構
- 27. 按層次結構排序列表
- 28. 多個表的層次結構查詢
- 29. 使用XSLT將平面XML結構更改爲層次結構
- 30. 沒有散佈版本號的maven項目的層次結構
你能指點我一些關於如何做到這一點的信息的方向嗎? – Evildommer5 2013-08-30 08:44:49