AFAIK nie ma obsługi rekurencyjnych CTE w LINQ ani w EF. Rozwiązaniem jest wyeksponowanie CTE jako widoku. Artykuł na temat zapytań rekurencyjnych lub hierarchicznych przy użyciu EF Code First i migracji pokazuje, jak wdrożyć taki widok przy użyciu migracji kodu EF.
Próba emulacji CTE poprzez wykonywanie rekurencyjnych iteracji po stronie klienta nie jest skalowana do dużych zestawów danych i skutkuje gadatliwą wymianą z serwerem. Zwróć uwagę, jak Twój kod EF zwraca IEnumerable
nie IQueryable
, oznacza to, że materializuje każdy poziom, a następnie łączy następny poziom dla każdego wpisu jako oddzielne żądanie . Rozwiązanie oparte na LINQ będzie działać rozsądnie w przypadku płytkich hierarchii z ograniczoną liczbą wpisów (i zauważ, że wiele projektów może mają taki układ danych, posty/odpowiedzi użytkowników są typowym przykładem), ale rozpadną się pod głęboką hierarchią z wieloma elementami.