2017-05-09 2 views
0

다음과 같은 쿼리가 있습니다. 엔티티 dotnet core/linq에 가입 하시겠습니까?

SELECT * 
FROM Movie m INNER JOIN 
(
    SELECT movie_id, COUNT(movie_id) as amount 
    FROM Watchhistory 
    WHERE watch_date >= DATEADD(day,-3000, GETDATE()) 
    GROUP BY movie_id 
) as a on m.movie_id = a.movie_id 
ORDER BY a.amount DESC 

다음과 같은 테이블 : 지금

enter image description here

내 시도 : 나는 C#을 DOTNET 엔티티에서 작업을 진행하는 것 캔트 var movies = _context.Movie .AsNoTracking() .Join( _context.Watchhistory.Where( w => w.WatchDate >= Convert.ToDateTime(DateTime.Now).AddDays(-14)) .GroupBy(w => w.MovieId) .Select(m => new { amount = m.Count(), mID = m.Key }) .OrderByDescending(a => a.amount) .Select(a => new { movieid = a.mID }), m => m.MovieId, w => w.movieid, (m, w) => m);

. linq에서 올바른 외부 조인을 사용하려면 어떻게해야합니까?

+0

이의 왜 당신도 오른쪽 외부 조인이 필요합니까 당신이 무엇을 시도했다보고 –

+0

것을 떨어져 노력합시다 :

그렇게

SELECT * FROM Movie m INNER JOIN ( SELECT movie_id, COUNT(movie_id) as amount FROM Watchhistory WHERE watch_date >= DATEADD(day,-3000, GETDATE()) GROUP BY movie_id ) as a on m.movie_id = a.movie_id ORDER BY a.amount DESC 

뭔가처럼된다? 외래 키가 제대로 설정되었다고 가정하면'MovieHistory' 테이블에'Movie' 테이블에 존재하지 않는'movie_id'를 가질 수 없습니다. 내부 조인으로 충분합니다. – GarethD

+0

SQL에서 생각을 멈추고 linq를 생각해보십시오. '오른쪽 외부 조인'은 SQL 개념입니다. @ 가레 스가 맞습니다. – tschmit007

답변

0

거의 LINQ에서 JOIN을 사용하지 않습니다. 대신 쿼리를 작성하여 모델을 탐색하십시오.

var q = from m in db.Movies 
      select new {m.MovieID,m.Name, amount = m.WatchHistory.Where(w => w.WatchDate >= ...).Count() }; 

    var results = q.Where(m => m.amount > 0).OrderByDesc(m => m.amount).ToList(); 

은 다윗이

관련 문제