.net 具有多个表的Linq GroupJoin
我必须遵循Linq查询来获取用户并添加UserClaimCollection.net 具有多个表的Linq GroupJoin,.net,linq,.net-core,.net,Linq,.net Core,我必须遵循Linq查询来获取用户并添加UserClaimCollection public async Task<List<User>> GetCollection() { List<User> result = _identityContext.Users .GroupJoin( _identityContext.UserClaims, u => u.Id,
public async Task<List<User>> GetCollection()
{
List<User> result = _identityContext.Users
.GroupJoin(
_identityContext.UserClaims,
u => u.Id,
uc => uc.UserId,
(u, uc) => new { user = u, claims = uc })
.ToList()
.Select(u => new User(
new Guid(u.user.Id),
u.user.UserName,
u.user.FirstName,
u.user.LastName,
u.user.Email,
new UserClaimCollection(
u.claims.Select(uc => new UserClaim(uc.ClaimType, uc.ClaimValue)).ToList()
))
).ToList();
return result;
}
公共异步任务GetCollection()
{
列表结果=_identityContext.Users
.GroupJoin(
_identityContext.UserClaims,
u=>u.Id,
uc=>uc.UserId,
(u,uc)=>new{user=u,claims=uc})
托利斯先生()
.选择(u=>新用户(
新Guid(u.user.Id),
u、 user.UserName,
u、 user.FirstName,
u、 user.LastName,
u、 用户邮箱,
新UserClaimCollection(
u、 claims.Select(uc=>newuserclaim(uc.ClaimType,uc.ClaimValue)).ToList()
))
).ToList();
返回结果;
}
如何将第二个GroupJoin添加到此选择以添加角色集合
e、 g
公共异步任务GetCollection()
{
列表结果=_identityContext.Users
.GroupJoin(
_identityContext.UserClaims,
u=>u.Id,
uc=>uc.UserId,
(u,uc)=>new{user=u,claims=uc})
.GroupJoin(
_identityContext.UserRoles,
u=>u.Id,
ur=>ur.UserId,
(u,ur)=>new{user=u,roles=ur})
托利斯先生()
.选择(u=>新用户(
新Guid(u.user.Id),
u、 user.UserName,
u、 user.FirstName,
u、 user.LastName,
u、 用户邮箱,
新UserClaimCollection(
u、 claims.Select(uc=>newuserclaim(uc.ClaimType,uc.ClaimValue)).ToList()
)),
新用户角色集合(
u、 roles.Select(ur=>newuserrole(ur.RoleType,ur.RoleValue)).ToList()
))
).ToList();
返回结果;
}
您需要记住第一个
GroupJoin
的输出是您的新匿名类,因此您需要记住这是传递到第二个GroupJoin
的内容。我建议命名lambda参数以提醒您这一点
List<User> result = _identityContext.Users
.GroupJoin(
_identityContext.UserClaims,
u => u.Id,
c => c.UserId,
(user, claims) => new { user, claims })
.GroupJoin(
_identityContext.UserRoles,
uc => uc.user.Id,
roles => roles.UserId,
(uc, roles) => new { uc.user, uc.claims, roles })
.ToList()
.Select(ucr => new User(
new Guid(ucr.user.Id),
ucr.user.UserName,
ucr.user.FirstName,
ucr.user.LastName,
ucr.user.Email,
new UserClaimCollection(
ucr.claims.Select(c => new UserClaim(c.ClaimType, c.ClaimValue)).ToList()
)),
new UserRoleCollection(
ucr.roles.Select(r => new UserRole(r.RoleType, r.RoleValue)).ToList()
))
).ToList();
List result=\u identityContext.Users
.GroupJoin(
_identityContext.UserClaims,
u=>u.Id,
c=>c.UserId,
(用户,声明)=>新{用户,声明})
.GroupJoin(
_identityContext.UserRoles,
uc=>uc.user.Id,
roles=>roles.UserId,
(uc,roles)=>new{uc.user,uc.claims,roles})
托利斯先生()
.选择(ucr=>新用户(
新Guid(ucr.user.Id),
ucr.user.UserName,
ucr.user.FirstName,
ucr.user.LastName,
ucr.user.Email,
新UserClaimCollection(
选择(c=>newuserclaim(c.ClaimType,c.ClaimValue)).ToList()
)),
新用户角色集合(
选择(r=>newuserrole(r.RoleType,r.RoleValue)).ToList()
))
).ToList();
第二个GroupJoin
中应该有u=>u.user.Id
。记住第一个GroupJoin
的输出是什么。您应该拥有包含所有的输出。
List<User> result = _identityContext.Users
.GroupJoin(
_identityContext.UserClaims,
u => u.Id,
c => c.UserId,
(user, claims) => new { user, claims })
.GroupJoin(
_identityContext.UserRoles,
uc => uc.user.Id,
roles => roles.UserId,
(uc, roles) => new { uc.user, uc.claims, roles })
.ToList()
.Select(ucr => new User(
new Guid(ucr.user.Id),
ucr.user.UserName,
ucr.user.FirstName,
ucr.user.LastName,
ucr.user.Email,
new UserClaimCollection(
ucr.claims.Select(c => new UserClaim(c.ClaimType, c.ClaimValue)).ToList()
)),
new UserRoleCollection(
ucr.roles.Select(r => new UserRole(r.RoleType, r.RoleValue)).ToList()
))
).ToList();