Лямбда-выражение объединяет несколько таблиц с предложением 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
, и спасибо за любую помощь
Ответы
Ответ 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
});