2016-03-23 3 views
-1

私のコンテキストからすべてのジャンルを取得して表示しようとしています。定数値の作成

私はプログラムを実行すると、私は何を得るこの:

型「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; } 

} 

のViewModel

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

ちょうど_ "このコンテキストでは、プリミティブ型または列挙型のみがサポートされています" _カスタムクラスは使用できません。プリミティブ型またはプリミティブ型のリストを使用する必要があります – Mafii

+0

I最初の文以外のすべてを消去したリビジョンをロールバックします。コードは関連する部分であり、質問に答えた後でもあります。 –

答えて

0

次のようにそれを使用する:

Roles = db.Roles.ToList().Select(r => new RoleCheckbox 
{ 
    Id = r.Id, 
    //This should work now 
    IsChecked = user.Roles.Contains(r), 
    Name = r.Name 
}).ToList() 
0

user.Rolesdb.Rolesと異なるタイプであるように見えます。そのようなものとして、おそらく他を含むことはできません。 Linq

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() 
}); 

あなたが.Anyを使用して.Containsあなたが達成するために探していたと同様に評価する述語を渡すことができます。このように、その書き換え

してみてください。

0

LINQ to EntitiesがContains(あなたの場合はRoleEntity)をサポートしていないというエラーメッセージが表示されます。

あなたがする必要があるのは、Idを含むintのケースリストに「プリミティブタイプ」のリストを作成することです。

その後、
var userRoleIds = user.Roles.Select(r => r.Id).ToList(); 

とあなたがToListメソッド()を使用して、最初のdb.Rolesクエリを実行する必要がありますし、あなたのコードは動作するはずです

IsChecked = userRoleIds.Contains(r.Id), 
関連する問題