AFAIKでは、LINQでもEFでも再帰CTEはサポートされていません。解決策は、CTEをビューとして公開することです。 EFコードファーストとマイグレーションを使用した再帰クエリまたは階層クエリに関する記事は、EFコードファーストマイグレーションを使用してそのようなビューをデプロイする方法を示しています。
クライアント側の反復反復を実行してCTEをエミュレートしようとしても、大規模なデータセットに拡張できず、サーバーとのやり取りがおしゃべりになります。 EFコードがIEnumerable
を返す方法に注意してください IQueryable
ではありません 、これは、各レベルを具体化し、各エントリの次のレベルを個別のリクエストとして連結することを意味します。 。 LINQベースのソリューションは、エントリ数が限られている浅い階層で適切に機能します(また、多くのプロジェクトで そのようなデータレイアウトがあり、ユーザーの投稿/回答が典型的な例です)が、多くの要素を持つ深い階層の下で崩壊します。