Подтвердить что ты не робот

Лямбда-выражение объединяет несколько таблиц с предложением select и where

У меня есть три таблицы для многих отношений. Я присоединился к трем таблицам и выбираю значение, которое я хочу, но теперь мне нужно выбрать одну строку из результата запроса, где, указав идентификатор, это моя третья таблица

И это запрос с использованием выражения LINQ lambda:

DataBaseContext db = new DataBaseContext();

public ActionResult Index()
{

    var UserInRole = db.UserProfiles.
        Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId,
        (u, uir) => new { u, uir }).
        Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro })
        .Select(m => new AddUserToRole
        {
            UserName = m.r.u.UserName,
            RoleName = m.ro.RoleName
        });

    return View(UserInRole.ToList());
}

результат будет таким, как с помощью sql query

sql запрос

select * 
from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId 
                   join webpages_Roles r on uir.RoleId = r.RoleId 

результат запроса sql

теперь я использую запрос anther sql, чтобы отфильтровать результат запроса sql по запросу и установить условие where u.UserId = 1, чтобы дать мне обратно пользователя с идентификатором 1, подобным этому

select * 
from UserProfile u join webpages_UsersInRoles uir on u.UserId = uir.UserId 
                   join webpages_Roles r on uir.RoleId = r.RoleId 
where u.UserId = 1

и результат этого sql запроса

так как я могу добавить where clause в мое lambda-выражение, чтобы дать мне тот же результат, что и результат запроса sql, и спасибо за любую помощь

4b9b3361

Ответ 1

Если я правильно понимаю ваши вопросы, все, что вам нужно сделать, это добавить .Where(m = > m.r.u.UserId == 1):

    var UserInRole = db.UserProfiles.
        Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId,
        (u, uir) => new { u, uir }).
        Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro })
        .Where(m => m.r.u.UserId == 1)
        .Select (m => new AddUserToRole
        {
            UserName = m.r.u.UserName,
            RoleName = m.ro.RoleName
        });

Надеюсь, что это поможет.

Ответ 2

Я искал что-то, и я нашел этот пост. Я отправляю этот код, который управляет отношениями "многие ко многим", если кому-то это нужно.

    var UserInRole = db.UsersInRoles.Include(u => u.UserProfile).Include(u => u.Roles)
    .Select (m => new 
    {
        UserName = u.UserProfile.UserName,
        RoleName = u.Roles.RoleName
    });