2012-02-17 67 views
1

我有以下數據對象:LINQ - 遞歸請求

Messages: 
MessageID int, 
Text string, 
ParentMessageID int? 

所以,記錄,如:

1 | 「文本1」| null 2 | 「回覆文本1」| 1 3 | 「回覆回覆文本1」| 2

...

我需要一個線程來計算有多少消息。 LINQ如何做到這一點?

+0

你不知道。你使用遞歸。 「這項工作的正確工具...」 – 2012-02-17 12:06:42

+0

你已經試過了什麼? – rene 2012-02-17 12:07:27

回答

2

使用LINQ to Entities是不可能的:您需要編寫一個公用表表達式來執行使用SQL的遞歸查詢。這些通常很慢。

假設你總是希望從層次結構中的同一級別進行計數,那麼最簡單的解決方案是爲root id添加一個屬性,就像這樣。

Messages: 
MessageID int, 
Text string, 
ParentMessageID int? 
ThreadRootID int 

線程根對給定線程中的所有消息都是相同的。很容易計算那些具有相同的ThreadRootId(並且比遞歸查詢更具性能)。

+0

我想過了,但它是數據冗餘 – John 2012-02-17 12:28:42

+0

是的,但冗餘有時是件好事;-) – 2012-02-17 12:38:32

1

不確定可以用LINQ for EF做什麼。您最好編寫一個存儲過程並將其映射到EF模型中的某個方法。