linq看不到实际的sql查询

时间:2012-05-03 09:00:39

标签: c# visual-studio-2010 linq-to-entities

我的一个查询使用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执行它,我会得到一个内存不足的异常。 有什么想法吗?

2 个答案:

答案 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查询都将打印为标准错误。