Linq将实体投影到IEnumerable中

时间:2016-03-24 22:18:04

标签: c# entity-framework linq linq-to-entities

我遇到映射Roles属性的问题,因此它对应于UserViewModel

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

var users = (from u in userManager.Users
             join r in roleManager.Roles
             on u.Id equals r.Id         
             select new UserViewModel { Id = u.Id, Username = u.UserName, Password = u.PasswordHash, Roles = select new Role { Name = r.Name }});

public class UserViewModel
{
   public string Id { get; set; }
   public string Username { get; set; }
   public string Password { get; set; }
   public IEnumerable<Role> Roles { get; set; }
}

public class Role
{
   public string Name { get; set; }
}

我应该如何制作Linq to Entities投影?

1 个答案:

答案 0 :(得分:0)

我认为您的查询设置方式很可能无法正常工作您需要一个子查询,因为您需要返回带有列表的项目/列表我会做类似的事情

由于您使用的是不同的上下文,因此可以尝试执行以下操作 我建议你有一些使用语句,这样你就可以清理你的内存,但是你可以使用它来转换为实际的内存对象然后过滤内存对象(只是确保你的数据不大)

 var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>().Users.ToList();

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())).Roles.ToList();


var users = (from u in userManager.Users       
              select new UserViewModel
              {  
                    Id = u.Id, 
                    Username = u.UserName, 
                    Password = u.PasswordHash,
                    Roles =(from r in  roleManager.Roles 
                             where r.Id==u.Id
                             select new Role
                             { 
                                 Name  = r.Name
                              }).ToList());