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