LINQ 看不到实际的 SQL 查询

本文关键字:SQL 查询 看不到 LINQ | 更新日期: 2023-09-27 18:32:56

我在使用 linq 2 entites 的一个查询时遇到问题。我正在尝试在查询生成到数据库之前查看查询,但没有成功。我尝试使用 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 执行它,则会出现内存不足异常。有什么想法吗?

LINQ 看不到实际的 SQL 查询

问题出在查询第一行的ToList()上。这将立即从具有指定UserIdwachtedRepo中获取所有行。

由于您的查询随后将成为混合 Linq to Entities/Linq to Objects,因此无法强制转换为 ObjectQuery 。删除ToList()时,您的查询是否仍然有效?

如果你想看看你的 Sql Server 中到底发生了什么,我建议使用 Sql Server Profiler 工具来查看你的查询。

假设watchedRepo是表示数据库连接的 Linq to SQL 对象

watchedRepo.Log = Console.Error;

所有 SQL 查询都将打印为标准错误。