2017-06-03 64 views
-1

请看看我的代码如下错误LINQ要求

 var result = (from c in db.vCompanies 
         where id == c.id 
         from user in db.Users 
         select new ViewCompanyModel() 
         { 
          Id = c.id, 
          Descripton = c.Descripton, 
          Name = c.Name, 
          ImageLink = c.ImageLink, 
          AdminEmail = c.Email, 
          Users = db.eUsers 
          .Where(o => o.CompanyName.Equals(c.Name)) 
          .Select(o => new UserManageViewModel.UserViewModel 
          { 
           Id = o.UserId, 
           Name = o.LastName, 
           Email = o.Email, 
           Company = o.CompanyName, 
           ListOfRoles = user.AspNetUsers.AspNetRoles.Select(x=>x.Name).ToList() 
          }) 
         }).FirstOrDefault(); 

我收到没有ListOfRoles正确的数据 - 我只接收第一用户的数据。 我试图这样

Where(x=>x.UserId == o.UserId) 

我也尝试过改变添加的东西对这个

ListOfRoles = db.Users.Where(x=>x.UserId == o.UserId).Select(x=>x.AspNetUsers.AspNetRoles)

但在这种情况下,我不能选择x.Name。 我做错了什么。 请告诉我。

+1

您只需要在'ListOfRoles'中为单个用户请求角色 - 当前由'user'范围变量标识的用户。由于使用'FirstOrDefault',你只需要一个单一的结果。也许你不应该叫'FirstOrDefault'? –

+0

我删除了FirstOrDefault并且出错 - 功能评估被禁用,因为之前的功能评估超时。您必须继续执行才能重新启用功能评估。 –

+2

这是一个调试器问题 - 它没有以任何其他方式说明发生了什么。 –

回答

0
if(result != null) 
     { 
     foreach (var user in result.Users) 
     { 
      var roles = db.Users.Where(x => x.UserId == user.Id).Select(x => x.AspNetUsers.AspNetRoles).FirstOrDefault(); 
      user.ListOfRoles = roles.Select(x => x.Name).ToList(); 
     } 
     } 

这就是答案!是工作!