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 执行它,则会出现内存不足异常。有什么想法吗?
问题出在查询第一行的ToList()
上。这将立即从具有指定UserId
的wachtedRepo
中获取所有行。
由于您的查询随后将成为混合 Linq to Entities/Linq to Objects,因此无法强制转换为 ObjectQuery
。删除ToList()
时,您的查询是否仍然有效?
如果你想看看你的 Sql Server 中到底发生了什么,我建议使用 Sql Server Profiler 工具来查看你的查询。
假设watchedRepo
是表示数据库连接的 Linq to SQL 对象
watchedRepo.Log = Console.Error;
所有 SQL 查询都将打印为标准错误。