我一直试图找到一个可以检索当前用户角色名称数组的查询。我已经非常接近我的代码并没有返回一个数组。我对实体框架相当新,并且对这种语言中的连接和内部查询非常困惑。如果我在标准sql中工作,我会在子查询中返回所有角色名称,其中roleid位于user.roles中。
现有代码:
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_token中的角色。
答案 0 :(得分:1)
解决方案正在执行group join
这样的
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)
};
如果您拥有Roles
实体的User
导航属性,那么您可以这样做:
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)
});
答案 1 :(得分:0)
我使用了我对实际SQL的理解,那就是我会做一个子查询来获取这些数据。这可以按照我的意愿运作。
代码:
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()
};