엔티티 프레임 워크 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; }
}
을, 나는 알 적어도 메서드의 매개 변수로 장르의 목록에 전달되는 generes 중 하나를 가지고 모든 영화를 반환하는 방법을 만들고 싶습니다 .
또한 매개 변수 목록에있는 개체가 개체 영화 컬렉션에있는 개체 장르와 다르기 때문에 직접 개체 장르가 아닌 IDGenre를 비교해야합니다.
나는이 수행하려고 :
myContext.Movies.Where(m=>(m.Genres.Select(gm=>gm.IDGenre).ToList<long>()).Intersect(listGenres.Genres.Select(gl=>gl.IDGenre).ToList<long>()).Any());
을하지만이 오류 얻을 : 엔티티에
LINQ는 방법 'System.Collections.Generic.List 1[System.Int64] ToList[Int64](System.Collections.Generic.IEnumerable
1 [System.Int64]을 인식하지 않습니다) '이며,이 메서드는 exp를 저장하는 것으로 변환 할 수 없습니다.
편집 : 두 경우 모두 ToList() 제거 시도했습니다. 나는이 코드를 사용합니다
myContext.Movies.Where(m=>(m.Genres.Select(gm=>gm.IDGenre)).Intersect(listGenres.Genres.Select(gl=>gl.IDGenre)).Any());
을 그리고이 경우이 오류가 얻을 : 그것은 형 장르의 상수 값을 만들 수 없습니다
합니다. 이 문맥에서는 오직 원시 타입 ('Int32, String y Guid'와 같은)만을 인정합니다.
감사합니다.
'ToList'를 제거해 보셨습니까? – Romoku
왜'.ToList()'* 두 번 *? –
Arran
ToList()를 사용하지 않으면 다른 오류가 발생합니다. 나는 그것을 메인 포스트에 추가했다. –