Arrays 获取用户角色名称数组的实体框架查询
我一直在尝试更正一个可以检索当前用户角色名数组的查询。很遗憾,我的代码没有返回数组。我对实体框架相当陌生,对这种语言中的连接和内部查询非常困惑。如果我使用的是标准sql,我会对一个子查询进行修改,以返回roleid位于user.roles中的roles中的所有roles名称 现行守则:Arrays 获取用户角色名称数组的实体框架查询,arrays,entity-framework,asp.net-identity,Arrays,Entity Framework,Asp.net Identity,我一直在尝试更正一个可以检索当前用户角色名数组的查询。很遗憾,我的代码没有返回数组。我对实体框架相当陌生,对这种语言中的连接和内部查询非常困惑。如果我使用的是标准sql,我会对一个子查询进行修改,以返回roleid位于user.roles中的roles中的所有roles名称 现行守则: var user = from obj in db.Users join obj2 in db.Roles on obj.Id equals obj2.Id
var user = from obj in db.Users
join obj2 in db.Roles on obj.Id equals obj2.Id
where obj.UserName == name select new {
FirstName =obj.FirstName,
LastName =obj.LastName,
Email =obj.Email,
JoinDate =obj.JoinDate,
ProfilePic =obj.ProfileSettings.ProfilePicture,
Roles = ""
};
我不想使用当前声明,因为我想确保调用getUser时返回的是最准确的角色,而不是存储在access_令牌中的角色。解决方案正在执行类似的操作
var user = from obj in db.Users
join obj2 in db.Roles on obj.Id equals obj2.Id into roles
where obj.UserName == name
select new {
FirstName =obj.FirstName,
LastName =obj.LastName,
Email =obj.Email,
JoinDate =obj.JoinDate,
ProfilePic =obj.ProfileSettings.ProfilePicture,
Roles = roles.Select(e=>e.Name)
};
更新
如果您拥有来自用户
实体的角色
导航属性,则可以执行以下操作:
var user = db.Users.Where(e=>e.UserName == name)
.Select(obj=>new {FirstName =obj.FirstName,
LastName =obj.LastName,
Email =obj.Email,
JoinDate =obj.JoinDate,
ProfilePic =obj.ProfileSettings.ProfilePicture,
Roles = obj.Roles.Select(e=>e.Name)
});
我使用了我对实际SQL的理解,也就是说,我将执行子查询来获取这些数据。这是我想要的 代码:
这很好,但我需要一个角色数组,而不是一个角色数组。如果表是相关的,并且您已经使用导航属性表示了关系,那么您的查询可能会更容易。您是否有
用户
实体中角色的nav属性?首先.ToArray抛出异常,所以我只是将其删除。其次,我不返回角色,角色对象为空。这是asp.net身份代码首先使用identity user这是web api为用户生成的默认数据库。然后我添加了一些自定义属性,但除此之外,它是默认数据库。
var user = from obj in db.Users
where obj.UserName == name
select new
{
ID1 = obj.Id,
FirstName = obj.FirstName,
LastName = obj.LastName,
Email = obj.Email,
JoinDate = obj.JoinDate,
ProfilePic = obj.ProfileSettings.ProfilePicture,
Roles = (from info in obj.Roles
from allData in db.Roles
where allData.Id == info.RoleId
select allData.Name).ToList()
};