0

エンティティ フレームワーク 4.0 を使用しています。N:N の関係にある映画とジャンルの 2 つのテーブルがあります。データベースには反復テーブルがありますが、edmx を作成するとテーブルが 2 つしかありません。次の 2 つのエンティティが作成されます。

Movies
{
   public Movies()
   {
       this.Genres= new HashSet<Genres>();
   }

  public long IDMovie { get; set; }
  public string Titulo { get; set; }
  public virtual ICollection<Generos> Generos { get; set; }
}



Genres
    {
       public Genres()
       {
           this.Movies= new HashSet<Movies>();
       }

      public long IDGenre { get; set; }
      public string Genre{ get; set; }
      public virtual ICollection<Movies> Movies{ get; set; }
    }

私のリポジトリでは、メソッドのパラメーターとしてジャンルのリストで渡されるジャンルの少なくとも 1 つを持つすべての映画を返すメソッドを作成したいと考えています。

また、オブジェクトのジャンルを直接比較するのではなく、IDGenre を比較する必要があります。これは、パラメーターのリストにあるオブジェクトが、オブジェクトの映画のコレクションにあるオブジェクトのジャンルと異なるためです。

私はこれをしようとします:

myContext.Movies.Where(m=>(m.Genres.Select(gm=>gm.IDGenre).ToList<long>()).Intersect(listGenres.Genres.Select(gl=>gl.IDGenre).ToList<long>()).Any());

しかし、私はこのエラーが発生します:

LINQ to Entities はメソッドのメソッド 'System.Collections.Generic.List 1[System.Int64] ToList[Int64](System.Collections.Generic.IEnumerable1[System.Int64])' を認識せず、このメソッドをストア式に変換することはできません。

編集:どちらの場合も ToList() を削除しようとしました。私はこのコードを使用します:

myContext.Movies.Where(m=>(m.Genres.Select(gm=>gm.IDGenre)).Intersect(listGenres.Genres.Select(gl=>gl.IDGenre)).Any());

この場合、次のエラーが発生します。

タイプ Genres の定数値を作成することはできません。このコンテキストでは、プリミティブ型 (「Int32、String y Guid」など) のみが許可されます。

ありがとう。

4

1 に答える 1

1

Intersectを使用している場合、本当に必要ですAnyか? Join列を合わせようとしているので、 a を使用してみてください。

var compareGenres = listGenres.Genres.Select(gl => gl.IdGenre).ToList();
var matchingMovies = myContext.Movies.Where(m =>
                                        m.Genres.Join(compareGenres,
                                                      g => g.IdGenre,
                                                      cg => cg.IdGenre,
                                                      (g, cg) => g
                                                     ).Any());
于 2013-06-17T14:47:40.357 に答える