2012-02-17 69 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模型中的某个方法。