我有一个非常标准的用户和角色模型:
+-------+ +-----------+ +-------+
| 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,所以我很确定我的查询在某种程度上是错误的。有人可以告诉我我的查询哪里出错了,是否有更好的方法来完成我想要实现的目标?
先感谢您!