Рекурсивный запрос Linq - Персона> Менеджер> Отдел - PullRequest
0 голосов
/ 13 июня 2011

Скажем, у меня есть такой набор данных:

PersonId  |   ManagerId  |  DepartmentId
========================================

1             null          1
2             1             1
3             1             2
4             2             1

и т. Д.

Я ищу запрос Linq, который:

Дан ManagerId и набор DepartmentIds дадут мне все соответствующие PersonIds .Запрос должен возвращать все PersonIds под менеджером, вплоть до дерева, а не только непосредственно под этим менеджером.

Вот что я пробовал до сих пор: http://pastebin.com/zF9dq6wj

Спасибо!Крис.

Ответы [ 2 ]

5 голосов
/ 13 июня 2011

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

1 голос
/ 13 июня 2011

Вы не можете выполнять рекурсивные запросы в Linq2SQL или Linq2Entities. Я бы предложил написать View с использованием CTE и добавить его в файл DataContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...