1

linq2エンティティを使用したクエリの1つに問題があります。dbに生成される前にクエリを表示しようとしていますが、成功しません。ToTraceString()を使用してみましたが、クエリをObjectQueryにキャストできませんでした。これは私の質問です:

  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);

linqから実行しようとすると、メモリ不足の例外が発生します。何かアイデアはありますか?

4

2 に答える 2

3

問題はToList()、クエリの最初の行にあるあなたにあります。wachtedRepoこれにより、指定されたからすべての行がすぐにフェッチされますUserId

クエリはLinqtoEntities / Linq to Objectsのハイブリッドになるため、にキャストすることはできませんObjectQuery。削除してもクエリは機能しますToList()か?

SQL Serverで実際に何が起こっているかを確認したい場合は、SQLServerプロファイラーツールを使用してクエリを表示することをお勧めします。

于 2012-05-03T10:28:48.687 に答える
1

watchedRepoデータベース接続を表すLinqからSQLへのオブジェクトであると仮定します

watchedRepo.Log = Console.Error;

すべてのSQLクエリは標準エラーで出力されます。

于 2012-05-03T10:28:21.123 に答える