Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 获取用户角色名称数组的实体框架查询_Arrays_Entity Framework_Asp.net Identity - Fatal编程技术网

Arrays 获取用户角色名称数组的实体框架查询

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

我一直在尝试更正一个可以检索当前用户角色名数组的查询。很遗憾,我的代码没有返回数组。我对实体框架相当陌生,对这种语言中的连接和内部查询非常困惑。如果我使用的是标准sql,我会对一个子查询进行修改,以返回roleid位于user.roles中的roles中的所有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_令牌中的角色。

解决方案正在执行类似的操作

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()
                       };