Как преобразовать оператор SQL в LINQ "IN" Join - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть этот оператор SQL:

Select Id from dbo.AspNetUsers users Join AspNetUserRoles roles On roles.RoleId in ('2', '4', '5')

, который я хотел бы преобразовать в Linq.

Самое близкое, к чему я мог добраться:

from users in db.AspNetUsers
join roles in db.AspNetUserRoles on new { RoleId = "2" } equals new { RoleId = roles.RoleId }
select new users.Id

, который присоединяется только к RoleId = "2", но мне также нужно присоединиться к RoleId = "4" and "5". Очевидно, ключевое слово «in» не поддерживается в операторе объединения в LINQ.

Есть ли способ добиться эквивалентного поведения в LINQ, возможно, с использованием другого синтаксиса функции?

1 Ответ

3 голосов
/ 05 апреля 2019

Вместо того, чтобы использовать JOIN, используйте WHERE для свойства навигации.

Я оставлю комментарии встроенными, так как их будет легче понять.

string[] roles = new[] { "2", "4", "5" };
var users = db.AspNetUsers
    // for each user
    .Where(user => user.Roles // get the roles
        // select the role id
        .Select(role => role.RoleId)
        // and filter by the wanted roles
        .Where(role => roles.Contains(role))
        // by ensuring any role with one of the wanted IDs exist
        .Any())
    // and then get the IDs of those users
    .Select(user => user.UserId)
    // to finally execute the query
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...