2012-05-03 4 views
1

linq 2 entites 사용하여 내 쿼리 중 하나가 문제가 있습니다. db하지만 어떤 성공도없이 생성되기 전에 쿼리를 보려고합니다. ToTraceString()을 사용해 보았지만 쿼리를 ObjectQuery로 캐스팅 할 수 없었습니다. 내가 메모리 부족 예외를 얻을 LINQ에서 그것을 실행하려고하면linq 실제 SQL 쿼리를 볼 수 없습니다

var movies = (from m in watchedRepo.GetAll().Where(c => c.iUserId == userId).ToList() 
          join f in moviePageViewsRepository.GetAll() on m.iMovieId equals f.iMovieId 
          group f by new JoinClass { MovieId = f.iMovieId, Points = m.iPoints } 
          into g 
          orderby g.Key.Points descending , g.Sum(d => d.iScore) descending 
           select new JoinClass { MovieId = g.Key.MovieId, Points = g.Key.Points, PageViews = g.Sum(d => d.iScore) }).Skip(skip).Take(take); 

: 이 내 쿼리입니다. 아이디어가 있으십니까? watchedRepo 가정

답변

3

문제의 첫 번째 줄에 ToList()이 (가) 있습니다. 그러면 wachtedRepo에서 모든 행을 즉시 UserId으로 가져옵니다.

쿼리가 개체와의 하이브리드 Linq가 될 것이므로 ObjectQuery으로 캐스팅 할 수 없습니다. ToList()을 삭제해도 검색어가 계속 작동합니까?

SQL Server에서 실제로 어떤 일이 일어나고 있는지 보려면 SQL Server 프로파일 러 도구를 사용하여 쿼리를 보는 것이 좋습니다.

+0

"ToList()를 제거 할 때 쿼리가 계속 작동합니까?". 나는 Generic Repositories를 사용하고 있는데, "ToList"를 사용하지 않으면 다른 dbcontext에 대한 코드가 동일한 쿼리에서 허용되지 않습니다. 내가 뭘 잘못하고 있는지 말해 줄 수있어? –

+0

두 리포지토리간에 동일한 DbContext를 공유하고 있습니까? –

+0

나는 Generic Repository Approach를 사용하고 있기 때문에 내가 생각했다. http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle –

1

watchedRepo.Log = Console.Error; 

모든 SQL 쿼리

가 표준 오류로 출력됩니다 데이터베이스 연결을 나타내는 Linq는 SQL에 객체입니다.

+1

watchRepo는 dbcontext 내부에있는 My Repository (일반 저장소)를 나타냅니다. 따라서 직접 코드를 작성할 수는 없습니다. –

관련 문제