Я уверен, что могу получить результаты, которые я хочу получить от одного заявления Linq, я просто не могу найти его сам! Это то, что я до сих пор:Linq: несколько подзадач или подзапросы
var query = from uir in Aspnet_UsersInRoles
join r in Aspnet_Roles
on uir.RoleId equals r.RoleId
select new
{
UserId = uir.UserId,
RoleName = r.RoleName
};
var query2 = from q in query
group q by q.UserId into roles
select new
{
UserId = roles.Key,
Roles = roles.Distinct()
};
var query3 = from u in Aspnet_Users
join q in query2
on u.UserId equals q.UserId
select new
{
UserId = u.UserId,
UserName = u.UserName,
Roles = q.Roles
};
и даже не правильно: я не действительно нужно иметь UserId в списке/IEnumerable «ролей», просто список RoleName (ов) для каждого UserId.
Я использую таблицы sql-членов asp.net и в основном хочу получить список пользователей, включая их роли.
- У каждого пользователя может быть несколько ролей.
- Пользователи могут не иметь вообще никакой роли (и все равно должны отображаться на результатах)
Можете ли вы мне помочь или указать мне в правильном направлении, о том, как получить те же результаты от одного оператора Linq?
PS. Да, я новичок Linq и ветеран SQL, который может затушевать мои мысли.
EDIT
Хорошо, я думаю, что я получаю к нему:
var q = from u in Aspnet_Users
from up in UserProfiles.Where(_up => _up.UserId == u.UserId).DefaultIfEmpty()
from uir in Aspnet_UsersInRoles.Where(_uir => _uir.UserId == u.UserId).DefaultIfEmpty()
from r in Aspnet_Roles.Where(_r => _r.RoleId == uir.RoleId).DefaultIfEmpty()
group r.RoleName by new {
u.UserId,
u.UserName,
up.FirstName,
up.LastName,
u.LastActivityDate
} into g
select new
{
userID = g.Key.UserId,
firstName = g.Key.FirstName,
lastName = g.Key.LastName,
userName = g.Key.UserName,
lastActivityDate = g.Key.LastActivityDate,
roles = g.Distinct()
};
Что вы думаете? (я добавил информацию из моей собственной таблицы UserProfiles, соотношение 1: 1 с Aspnet_Users)
Я получаю: «Имя« userRole »не находится в области видимости в левой части« равно ». Рассмотрим замену выражений по обе стороны от« equals ». – qbantek
Если я поменяю выражения, которые получаю: «Имя« пользователь »не находится в области действия в левой части« равно ». Рассмотрим замену выражений по обе стороны от« равно ». – qbantek
Ах да, моя ошибка, я пытался сохранить ее читабельным и изменить ситуацию вокруг, где я, вероятно, не должен был. Группировка взяла 'userRole' вне сферы действия. –