我想根据用户输入在IQueryable
上构建过滤器,并仅在最后执行查询。我正在努力理解背后的概念,以及它是否会按预期工作。
以下查询是否会在下面示例中的return fetchedWorkflowLogs.ToList()
上点击数据库?
// Partition latest record for Instance
IQueryable<WorkflowLog> fetchedWorkflowLogs
= this._workflowLog_repo
.GetAll()
.GroupBy(log => log.ID)
.Select(
grp => new
{
grp = grp,
MaxID = grp.Max(log => log.ID)
}
)
.SelectMany(
temp0 => temp0.grp,
(temp0, log) => new
{
temp0 = temp0,
log = log
}
)
.Where(temp1 => (temp1.log.ID == temp1.temp0.MaxID))
.Select(temp1 => temp1.log);
// .. some more filters
// Last filter
// Filter by Project
if (model.ProjectID != null)
{
fetchedWorkflowLogs.Where(record => record.Project.ID == model.ProjectID);
}
return fetchedWorkflowLogs.ToList();
答案 0 :(得分:1)
同意大卫。如果GetAll()返回IQueryable,并且return fetchedWorkflowLogs.ToList()
将导致评估linq查询,并且查询将命中数据库。
如果您可以调试并逐步完成它是最好的,如果直接执行程序很困难,编写测试可以帮助您。