创建常量值

时间:2016-03-23 10:38:51

标签: c

我试图从我的上下文中获取所有类型并显示它们。

这是我运行程序时得到的:

无法创建“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; } 
}

3 个答案:

答案 0 :(得分:0)

似乎问题是user.Rolesdb.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()