我有以下數據對象:LINQ - 遞歸請求
Messages:
MessageID int,
Text string,
ParentMessageID int?
所以,記錄,如:
1 | 「文本1」| null 2 | 「回覆文本1」| 1 3 | 「回覆回覆文本1」| 2
...
我需要一個線程來計算有多少消息。 LINQ如何做到這一點?
我有以下數據對象:LINQ - 遞歸請求
Messages:
MessageID int,
Text string,
ParentMessageID int?
所以,記錄,如:
1 | 「文本1」| null 2 | 「回覆文本1」| 1 3 | 「回覆回覆文本1」| 2
...
我需要一個線程來計算有多少消息。 LINQ如何做到這一點?
使用LINQ to Entities是不可能的:您需要編寫一個公用表表達式來執行使用SQL的遞歸查詢。這些通常很慢。
假設你總是希望從層次結構中的同一級別進行計數,那麼最簡單的解決方案是爲root id添加一個屬性,就像這樣。
Messages:
MessageID int,
Text string,
ParentMessageID int?
ThreadRootID int
線程根對給定線程中的所有消息都是相同的。很容易計算那些具有相同的ThreadRootId
(並且比遞歸查詢更具性能)。
我想過了,但它是數據冗餘 – John 2012-02-17 12:28:42
是的,但冗餘有時是件好事;-) – 2012-02-17 12:38:32
不確定可以用LINQ for EF做什麼。您最好編寫一個存儲過程並將其映射到EF模型中的某個方法。
你不知道。你使用遞歸。 「這項工作的正確工具...」 – 2012-02-17 12:06:42
你已經試過了什麼? – rene 2012-02-17 12:07:27