나는 3 개의 테이블을 가지고 있으며 단순화를 위해 IMDB 예제 (사용자 등급 영화)를 사용할 것입니다.모든 동영상을 한 번만 표시하도록 LINQ 쿼리를 만드는 방법은 무엇입니까?
- 표 1 : 영화
- 표 2 :
- 표 3 MovieUserRating : 사용자.
영화 (3 동영상) :
ID MOVIE_NAME
1 Movie1
2 Movie2
3 Movie3
MovieUserRating (단지 영화 일을 평가 두 사용자) :
MOVIE_ID USER_ID RATING
1 1 10
1 2 9
사용자 (2 명 사용자) :
ID USER_NAME
1 User1
2 User2
그래서 어떤 사용자 (예 : User1)에 로그인 한 경우 모든 영화 및 기록 된 사용자의 등급 목록을 반환하는 LINQ 쿼리를 실행해야합니다. 동영상이 기록 된 사용자에 의해 평가되지 않은 경우 (USER1은 로그인 한 경우) 0
그래서, 내가 같이하는 결과를 필요로 보여 것 :
MOVIE RATING
Movie1 10
Movie2 0
1 및 사용자가 로그인되어있는 경우 :
var results =
from m in db.Movies
from mur in db.MoveUserRatings.Where(mur => mur.MOVIE_ID == m.ID).DefaultIfEmpty()
from u in db.Users.Where(u=>u.ID == mur.USER_ID).DefaultIfEmpty()
select new MyModelViewClass
{
MovieName = m.MOVIE_NAME,
MovieRating = (u.Id == “user ID that was supplied”) ? mur.RATING : 0
};
불행하게도,이 쿼리 retur : 그래서
MOVIE RATING
Movie1 9
Movie2 0
이는 ASP.NET 컨트롤러 내 쿼리 (좋지 않은)입니다 ns Movie1을 두 번 평가했습니다. 그래서, 결과는 다음과 같다 : (사용자 1은 로그인 한 경우)
가: (2 로그인 한 경우)
가MOVIE RATING
Movie1 10
Movie1 0
Movie2 0
:
MOVIE RATING
Movie1 9
Movie1 0
Movie2 0
이 어떻게 결과를 얻기 위해이 문제를 해결할 수 있습니다 내가 필요해 (영화 1은 한 번만 보여줍니다)?
미리 도움을 청하십시오.
당신은 당신의 엔트리를'join '할 필요가 있습니다. http://stackoverflow.com/q/5537995/81053 –