0

CodeFirstを使用する.NET4MVC4には、多対多の関係を形成する2つのクラスがあります。簡単なLINQクエリを記述して、特定のジャンルのリストから少なくとも1つ以上のジャンルを持つすべてのゲームを検索するにはどうすればよいですか?(つまり、ストラテジーおよび/またはサンドボックスのジャンルのすべてのゲームを取得します)

public class Game
{
    public int ID { get; set; }
    public virtual ICollection<Genre> Genres { get; set; }
}

public class Genre
{
    public int ID { get; set; }
    public virtual ICollection<Game> Games { get; set; }
}

私はCodeFirstを使用しているため、抽象化された結合テーブルGenreGamesにアクセスできないことに注意してください。

配列gidから少なくとも1つのジャンルIDを含むゲームを見つけるために、次のことを試みました。

var gid = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var result = from g in unitOfWork.GameRepository.dbSet
             where (
                 from gen in unitOfWork.GenreRepository.dbSet
                 where gid.Contains(gen.ID)
                 select gen.ID
             ).Any()
             select g;

結果を取得する場合

List<Game> similiarGames = result.ToList<Game>();

次のエラーが発生します。

タイプ'GratifyGaming.Domain.Models.Genre'の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。

プリミティブ型または列挙型のみを使用して、必要な結果を得るにはどうすればよいですか?回避策はありますか?

4

2 に答える 2

1

代わりにこれを試してください:

var test = unitOfWork.GameRepository.dbSet
                         .Where(G => G.Genres.Where(genre => 
                                     gid.Contains(genre .ID)).Count() > 0);

幸運を !!

于 2012-10-27T12:15:45.557 に答える
1

これを試して:

var result = unitOfWork.GameRepository.dbSet
    .Where(game => game.Genres.Any(genre => gid.Contains(genre.ID));
于 2012-10-27T12:18:32.420 に答える