LINQ - 递归请求

时间:2012-02-17 12:05:28

标签: linq entity-framework-4

我有以下数据对象:

Messages:
MessageID int,
Text string,
ParentMessageID int?

所以,记录如:

  

1 | “文字1”|空值   2 | “回复文字1”| 1   3 | “回复文字1回复”| 2

...

我需要计算一个帖子中有多少条消息。 LINQ怎么做?

2 个答案:

答案 0 :(得分:2)

使用LINQ to Entities是不可能的:您需要编写公共表表达式来使用SQL执行递归查询。这些往往很慢。

假设您总是希望从层次结构中的同一级别开始计算,最简单的解决方案是为root id添加属性,就像这样。

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

给定线程中的所有消息的线程根相同。很容易计算具有相同ThreadRootId的那些(并且将比递归查询更高效)。

答案 1 :(得分:1)

不确定是否可以使用LINQ for EF。您最好编写一个存储过程并将其映射到EF模型中的某个方法。