2016-03-24 39 views
0

içine varlık nesnesine Linq Roles özelliği eşleme ile ilgili bir sorunla karşılaştı, bu nedenle UserViewModel karşılık gelir.IEnumerable

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'i Varlıklar projeksiyonuna nasıl yapmalıyım? Kullandığınız yana

cevap

0

Sana ben

böyle bir şey yapsın listesini içeren bir madde/liste dönmek gerekir beri büyük olasılıkla işe yaramayacak sorgu kurulum yolu Bir alt sorgu gerektiğini düşünüyorum Aşağıdaki bağlamda yapabileceğiniz farklı içerikler 'u kullanarak bir çeşit kullanma bildirimi kullanmanızı tavsiye ederim, böylece hafızanızı temizlersiniz, ancak bunu gerçek bellek nesnelerine listelemek için kullanabilir ve daha sonra bellek nesnelerini filtreleyebilirsiniz (yalnızca verilerinizin olduğundan emin olun) büyük değil)

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()); 
+0

Bu tür bir alt soruyu denedi, ancak her zaman "Belirtilen LINQ ifadesi, bkz. farklı bağlamlarla ilişkili sorgulara girer. " bu durumda olduğu gibi. – netdis

+0

Güncelleştirmeyi deneyin Yukarıdaki –

+0

Artık, 'var userManager' içinde doğrudan belirttiğiniz şekilde, roleManager.Roles' öğesinden Rol'leri kaldırın. Mevcut kurulumda ToList'in çağrılması iyi. – netdis

İlgili konular