Как сделать JOIN в EF, когда условие соединения похоже - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующий запрос SQL, который я хотел бы преобразовать в запрос EF Linq, и я не знаю, как написать часть «Мне нравится».

SELECT DepartmentsWithChildren.*
FROM dbo.People
    INNER JOIN dbo.DepartmentPersons
        ON DepartmentPersons.Person_Id = People.Id
    INNER JOIN dbo.DepartmentsWithChildren
        ON DepartmentsWithChildren.lvl LIKE '%,' + CAST(DepartmentPersons.Department_Id AS VARCHAR(50)) + ',%'
WHERE UserId = '01cb89b4-9f81-4012-a4d9-5a38468a7433'

Пример результата вышеприведенного запроса

Id  ParentDepartmentId  lvl
58  27  ,27,3,1,
64  27  ,27,3,1,
67  27  ,27,3,1,
77  27  ,27,3,1,
90  27  ,27,3,1,
93  27  ,27,3,1,
100 27  ,27,3,1,
102 27  ,27,3,1,
106 27  ,27,3,1,
134 27  ,27,3,1,
137 27  ,27,3,1,
396 27  ,27,3,1,
414 27  ,27,3,1,
171 67  ,67,27,3,1,
206 67  ,67,27,3,1,
219 67  ,67,27,3,1,

Чтобы уточнить, я хочу знать, как сделать LIKE частью JOIN, я знаю, что в предложении WHERE, которое я могу использовать, содержится, но для JOINS каждый пример, который я нахожу, использует только равенство, f.eks: Как объединять таблицы в EF LINQ

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Хороший и простой способ сделать это с помощью двух запросов linq.

var dict = from row in entities.departments where yada yada select row.Id;

var query = from row in entities.departmentpersons where
            dict.Contains(row.departmentId)
            select row;
0 голосов
/ 25 июня 2018

Вы можете использовать оператор равенства только при использовании объединения в Linq, ниже представлен возможный обходной путь.

Предполагая, что ваш DbContext называется db:

var result = from people in db.People
             from departmentWithChildren in db.DepartmentsWithChildren
             join departmentPerson in db.DepartmentPersons 
                             on people.Id equals departmentPerson.Person_Id
              where departmentWithChildren.Any(d => d.lvl.Contains("," + 
                             departmentPerson.Deparment_Id + ",")) &&
                             people.UserId = "01cb89b4-9f81-4012-a4d9-5a38468a7433"
              select departmentWithChildren;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...