IQueryable vs List问题。延迟加载和急切加载

时间:2013-04-16 14:58:29

标签: c# lambda

我有一个问题,如果我急于使用列表和.ToList()方法加载,我可以使我的Lambda查询工作。但不是我使用IQueryable延迟加载的地方。

当我在第一行代码上执行.tolist()时,它会从数据库中获取100,000行数据,这很慢(例如1)。

我希望直到稍后应用其他过滤器时才执行查询,如下面的示例2中当前不起作用。

异常详细信息:System.Data.SqlClient.SqlException:超时已过期。操作完成之前经过的超时时间或服务器没有响应。

调试时出错:

enter image description here

例1:

List<DataWashResultsReport> query = ents.DataWashResultsReports
               .Include("DataWashHistory")
               .Include("DataWashSchedule")
               .Where(q => q.IsProcessed == false).ToList();

query = query.GroupBy(g => g.ReferenceNumber).Select
      (g => g.OrderByDescending(t =>  t.TotalScore).FirstOrDefault()).ToList();

return query.Select(w => { return PopulateDomainWashResultFromData
   (w,   includeReportDetails: false); }).ToPagedList(pageNumber, pageSize);

示例2:

IQueryable<DataWashResultsReport> query = ents.DataWashResultsReports
             .Include("DataWashHistory")
             .Include("DataWashSchedule")
             .Where(q => q.IsProcessed == false);

query = query.GroupBy(g => g.ReferenceNumber).Select
  (g => g.OrderByDescending(t =>  t.TotalScore).FirstOrDefault());

return query.AsEnumerable().Select(w => 
   { return PopulateDomainWashResultFromData
      (w,  includeReportDetails: false); }).
      ToPagedList(pageNumber, pageSize);

在我进行更多过滤之前,不执行查询很重要,因为这会减少查询占用的时间。

另请注意,示例2不使用此行

query = query.GroupBy(g => g.ReferenceNumber).
   Select(g => g.OrderByDescending(t =>  t.TotalScore).FirstOrDefault()); 

这让我相信我在这里做的事情就是问题。

0 个答案:

没有答案