簡體   English   中英

如何在實體框架中進行此查詢?

[英]how to make this query in entity framework?

我正在使用實體框架4.0。 我有兩個表,電影和流派,關系為N:N。 在數據庫中,我有一個itermediate表,但是當創建edmx時,我只有兩個表。 它創建了兩個實體:

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

在我的資料庫中,我想創建一個方法,該方法返回所有至少具有一種類型的電影,這些電影在類型列表中作為方法的參數傳遞。

另外,我不需要直接比較對象流派,而是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.IEnumerable 1 [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)。

謝謝。

如果您使用的是Any您真的需要Intersect嗎? 嘗試使用Join因為您試圖將列匹配在一起。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM