AFAIK neexistuje žádná podpora pro rekurzivní CTE v LINQ ani v EF. Řešením je vystavit CTE jako pohled. Článek o rekurzivních nebo hierarchických dotazech pomocí EF Code First a Migrations ukazuje, jak nasadit takový pohled pomocí migrací EF code first.
Pokus o emulaci CTE prováděním rekurzivních iterací na straně klienta se neškáluje na velké soubory dat a vede k chatové výměně se serverem. Všimněte si, jak váš kód EF vrací IEnumerable
není IQueryable
, to znamená, že zhmotní každou úroveň a poté zřetězí další úroveň pro každý záznam jako samostatný požadavek . Řešení založené na LINQ bude přiměřeně fungovat pro mělké hierarchie s omezeným počtem vstupů (a všimněte si, že mnoho projektů může mít takové rozložení dat, typickým příkladem jsou uživatelské příspěvky/odpovědi), ale budou se hroutit pod hlubokou hierarchií s mnoha prvky.