构建完成后执行 IQueryable
Execute IQueryable after it's being done building
我想根据用户输入在 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();
同意大卫的观点。如果 GetAll() returns IQueryable,并且您 return fetchedWorkflowLogs.ToList()
将导致对 linq 查询进行评估,并且查询将命中数据库。
能调试能单步调试最好,如果直接执行程序有困难,写个测试能帮到你。
我想根据用户输入在 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();
同意大卫的观点。如果 GetAll() returns IQueryable,并且您 return fetchedWorkflowLogs.ToList()
将导致对 linq 查询进行评估,并且查询将命中数据库。
能调试能单步调试最好,如果直接执行程序有困难,写个测试能帮到你。