我试图从我的上下文中获取所有类型并显示它们。
这是我运行程序时得到的:
无法创建“MyBooks.Models.BookEntity”类型的常量值。在此上下文中仅支持原始类型或枚举类型。
修改
return View(new BooksEdit
{
BookName = book.BookName,
Genre = context.Genre.Select(b => new GenreList
{
Id = b.Id,
//This causes the error
yesGenre = book.Genres.Contains(b),
BookName = b.Name
}).ToList()
});
书
public class Book
{
public virtual int Id { get; set; }
public virtual string BookName{ get; set; }
public virtual IList<GEnre> Genres{ get; set; }
public Book()
{
Genres = new List<Genre>();
}
}
类型
public class Genre
{
public virtual int Id { get; set; }
public virtual string GEnreName{ get; set; }
public virtual IList<Book> Books{ get; set; }
}
视图模型
public class GenreList
{
public int Id { get; set; }
public bool yesGenre{ get; set; }
public string GenreName{ get; set; }
}
public class BookEdit
{
public IList<GenreList> Genres{ get; set; }
public string BookName{ get; set; }
}
答案 0 :(得分:0)
似乎问题是user.Roles
与db.Roles
的类型不同。因此,不可能包含另一个。
尝试重写它:
return View(new UsersEdit
{
Username = user.Username,
Email = user.Email,
Roles = db.Roles.Select(r => new RoleCheckbox
{
Id = r.Id,
//This should no longer cause an issue.
IsChecked = user.Roles.Any(role => role.Id == r.Id),
Name = r.Name
}).ToList()
});
使用Linq
,您可以使用.Any
并传递谓词,该谓词将以与您希望实现的.Contains
类似的方式进行评估。
答案 1 :(得分:0)
错误消息告诉您LINQ to Entities不支持Contains
类(RoleEntity
)。
您需要做的是在包含角色int
的{{1}}的案例列表中创建&#34;原始类型&#34;的列表。
Id
然后按如下方式使用
var userRoleIds = user.Roles.Select(r => r.Id).ToList();
答案 2 :(得分:0)
您应首先使用 ToList()执行db.Roles查询,并且您的代码应该有效:
Roles = db.Roles.ToList().Select(r => new RoleCheckbox
{
Id = r.Id,
//This should work now
IsChecked = user.Roles.Contains(r),
Name = r.Name
}).ToList()