我有一个问题,如果我急于使用列表和.ToList()方法加载,我可以使我的Lambda查询工作。但不是我使用IQueryable延迟加载的地方。
当我在第一行代码上执行.tolist()时,它会从数据库中获取100,000行数据,这很慢(例如1)。
我希望直到稍后应用其他过滤器时才执行查询,如下面的示例2中当前不起作用。
异常详细信息:System.Data.SqlClient.SqlException:超时已过期。操作完成之前经过的超时时间或服务器没有响应。
调试时出错:
例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());
这让我相信我在这里做的事情就是问题。