私はユーザーとロールのかなり標準的なモデルを持っています:
+-------+ +-----------+ +-------+
| Users | | UserRoles | | Roles |
+-------+ +-----------+ +-------+
| ID (P)| < | UserID (P)| | ID (P)|
| ... | | RoleID (P)| > | ... |
+-------+ +-----------+ +-------+
私はEntitiyフレームワークをORMとして使用しており、単一のLinqクエリでViewModelを構築しようとしています。これは次のように定義されています。
public class RoleDetail {
public class RoleUser {
public int ID { get; set; }
public string Username { get; set; }
}
public int ID { get; set; }
public string Rolename { get; set; }
public bool Active { get; set; }
public IEnumerable<RoleUser> Users { get; set; }
}
次のクエリが機能するはずだと思いました。
var query = Context.Roles
.Include("Users")
.Where(r => r.ID == id)
.Select(r => new RoleDetail() {
ID = r.ID,
Rolename = r.Rolename,
Active = r.Active,
Users = r.Users
.Select(u => new RoleDetail.RoleUser() {
ID = u.ID,
Username = u.Username
})
.ToList()
})
.FirstOrDefault();
ただし、これにより次のエラーがスローされます。
LINQ to Entitiesは、メソッド'System.Collections.Generic.List [RolesRepository + RoleDetail + RoleUser] ToList [RoleUser](System.Collections.Generic.IEnumerable [RolesRepository + RoleDetail + RoleUser])'メソッドを認識せず、このメソッドは認識できません。ストア式に変換されます。
私はLinqとあまり仕事をしていないので、クエリがどういうわけか間違っていると確信しています。誰かが私のクエリがどこで間違っているのか、そして私が達成しようとしていることを達成するためのより良い方法があるかどうかを教えてもらえますか?
前もって感謝します!