AFAIK няма поддръжка за рекурсивни CTE в LINQ, нито в EF. Решението е да се изложи CTE като изглед. Статията за рекурсивни или йерархични заявки, използващи първо код EF и миграции, показва как да разгърнете такъв изглед с помощта на първо мигриране на EF код.
Опитът за емулиране на CTE чрез извършване на рекурсивни итерации от страна на клиента не се мащабира до големи набори от данни и води до бъбрив обмен със сървъра. Обърнете внимание как вашият EF код връща IEnumerable
не IQueryable
, това означава, че материализира всяко ниво и след това конкатенира следващото ниво за всеки запис като отделна заявка . Решението, базирано на LINQ, ще работи разумно за плитки йерархии с ограничен брой влизания (и имайте предвид, че много проекти могат имат такова оформление на данните, като типичен пример са потребителските публикации/отговори), но ще се разпаднат под дълбоки йерархии с много елементи.