构建完成后执行 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 查询进行评估,并且查询将命中数据库。 能调试能单步调试最好,如果直接执行程序有困难,写个测试能帮到你。