簡體   English   中英

實體框架和自引用表

[英]Entity Framework and self-referencing table

我需要一個以一個名為“User”的表開頭的數據庫,該表需要自我引用,並且會有一個非常深的相關對象圖。 它需要像下面圖像的左側(忽略右側)。

在此輸入圖像描述

我還需要向上和向下遍歷此圖表以計算百分比,總計等。換句話說,在某些情況下我需要遍歷整個圖表。

這是可能的和/或它是如何完成的? 可以在LINQ語句中直接進行遍歷嗎? 例子?

編輯:我基本上是在嘗試創建一個網絡營銷場景,需要計算每個人的收入。

例子:

  1. 能夠計算特定用戶下每個用戶的總銷售額(因此每個用戶都會有某種收入)。
  2. 計算樹木某一級別的佣金(例如,如果頂級人員下面有3個人,每個人以1美元的價格出售產品,佣金是50%,則會有1.50美元。)
  3. 如果我查詢上面(左邊)的圖像為“B”,我應該得到“B,H,I,J,N,O”

希望這有助於:S

您不能僅使用LINQ遍歷整個樹,這種方式可以轉換為單個SQL查詢(或者它們的常量計數)。 您可以使用每個級別的一個查詢或使用一個查詢來執行此操作,該查詢僅限於特定的級別計數(但是這樣的查詢會在很多級別上變得非常大)。

在T-SQL中(我假設您使用的是MS SQL Server),您可以使用遞歸公用表表達式來執行此操作。 應該可以將它放入可以從LINQ使用的存儲過程中以獲取您實際需要的信息。

總而言之,您的選擇是:

  1. 不要使用LINQ,只使用帶遞歸CTE的SQL
  2. 在LINQ的存儲過程中使用遞歸CTE
  3. 使用LINQ,為每個級別創建一個查詢
  4. 使用難看的LINQ查詢僅限於幾個級別

我知道這已經很晚了,但如果你看一下Directed Graph算法,你可以繞過遞歸問題。 看看這兩篇文章:

http://www.sitepoint.com/hierarchical-data-database/

http://www.codeproject.com/Articles/22824/A-Model-to-Represent-Directed-Acyclic-Graphs-DAG-o

暫無
暫無

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

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