Используя Linq, не существует автоматического способа сделать это (о чем я когда-либо слышал) без нескольких поездок в базу данных. Таким образом, он действительно ничем не отличается от любой другой рекурсивной структуры вызовов, и вы можете выбирать между рекурсивными вызовами методов, какое-то время с объектом System.Collections.Queue (или Stack) для идентификаторов и т. Д. Если вашей серверной базой данных является SQL Server 2008 или выше, вы можете использовать его возможности рекурсивного запроса, но для этого вам придется вызвать sproc, поскольку Linq не сможет выполнить сам перевод.