繁体   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