Linq to sql Linq:多个子联接或子查询
我很确定我可以从一个Linq语句中得到我想要的结果,我只是无法自己找到它!这就是我到目前为止所做的:Linq to sql Linq:多个子联接或子查询,linq-to-sql,asp.net-membership,subquery,left-join,membership-provider,Linq To Sql,Asp.net Membership,Subquery,Left Join,Membership Provider,我很确定我可以从一个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 =
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
};
预期成果:
这甚至是不正确的:我真的不需要在“角色”列表/IEnumerable中有UserId,只需要每个UserId的RoleName列表
我使用的是asp.net成员资格sql表,基本上我想得到一个用户列表,包括他们的角色
- 每个用户可能有多个角色
- 用户可能根本没有角色(并且应该仍然显示在结果上)
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\u用户)我认为这是等效的
var query = from userRole in Aspnet_UsersInRoles
join role in Aspnet_Roles on userRole.RoleId equals role.RoleId
group role.RoleName by userRole.UserId into roles
join user in Aspnet_Users on roles.Key equals user.UserId
select new
{
user.UserId,
user.UserName,
Roles = roles.Distinct(),
};
看看这个是否有效。
我得到:“UsRe角色”的名称不在“相等”的左边。考虑交换“相等”的两边的表达式。“如果我交换表达式,我得到的是:‘用户’的名字不在‘相等’的左边。考虑交换‘相等’的两边的表达式。”啊,是的,我的错误。我试图保持它的可读性,并在我可能不应该改变的地方改变一些事情。groupby将userRole
排除在范围之外。我没有理解您关于合并的查询是错误的,我更正了这一点。您只想对角色名称进行分组,现在就可以了。