I持って、次のDataObject:そうLINQ - 再帰的な要求
Messages:
MessageID int,
Text string,
ParentMessageID int?
、レコードのように:
1 | "テキスト1" |ヌル 2 | "テキスト1に返信" | 1 3 | "テキスト1への返信に返信" | 2
...
私は1つのスレッドでどのように多くのメッセージを計算する必要があります。どのようにLINQでそれを行うには?
I持って、次のDataObject:そうLINQ - 再帰的な要求
Messages:
MessageID int,
Text string,
ParentMessageID int?
、レコードのように:
1 | "テキスト1" |ヌル 2 | "テキスト1に返信" | 1 3 | "テキスト1への返信に返信" | 2
...
私は1つのスレッドでどのように多くのメッセージを計算する必要があります。どのようにLINQでそれを行うには?
LINQ to Entitiesを使用することはできません。SQLを使用して再帰的クエリを実行するには、共通のテーブル式を記述する必要があります。これらはかなり遅いことが多いです。
常に階層内の同じレベルから数えたい場合、最も簡単な解決策は、このようにルートIDのプロパティを追加することです。
Messages:
MessageID int,
Text string,
ParentMessageID int?
ThreadRootID int
スレッドルートは、特定のスレッド内のすべてのメッセージで同じです。 ThreadRootId
のものを数えるのは簡単です(再帰的なクエリよりはるかに性能が良いでしょう)。
私はそれについて考えましたが、それはデータの冗長性です – John
はい、しかし冗長性は時々良いことです;-) –
LINQ for EFで行うことはできません。ストアドプロシージャを記述し、それをEFモデルのあるメソッドにマップする方がよいでしょう。
あなたはそうではありません。再帰を使用します。 "仕事のための正しいツール..." –
何を試しましたか? – rene