2016-03-24 17 views
0

Rolesプロパティのマッピングで問題が発生したため、UserViewModelに相当します。Linqからエンティティへの投影(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 to Entitiesプロジェクションはどのようにすればよいですか?

答えて

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

この種のサブクエリを試しましたが、常に「指定されたLINQ式にはreferさまざまなコンテキストに関連付けられたクエリを実行します。この場合のように。 – netdis

+0

上記のアップデートを試してください –

+0

'varuserManager'で直接指定するので、' r roleManager.Roles'のロールを削除しました。現在のセットアップでは、ToListを呼び出すことは問題ありません。 – netdis

関連する問題