我有以下 linq 查询 -
IQueryable<VaccinationClinic> clinics = _appDbContext.VaccinationClinics
.Include(h => h.HealthBoard)
.Include(c => c.ClinicType)
.Include(v => v.VaccinationAvailableTo)
.Include(p => p.AdministrativeLead).ThenInclude(pn => pn.Title)
.Include(d => d.ResponsibleSupervisingClinician).ThenInclude(dr => dr.Title)
.Include(d => d.ResponsibleSupervisingClinician).ThenInclude(dr => dr.ProfessionalBodyDetails)
.Include(r => r.Designations)
.Include(t => t.Training)
.Include(a => a.AnnualFigures).AsQueryable();
我们对结果进行搜索,例如-
if (searchCriteria == SearchCriteria.Designated)
{
clinics = clinics.Where(CheckDesignationIsActive(designationNumberOfDays));
clinics = clinics.Where(CheckDesignationIsActivePart2(designationNumberOfDays));
clinics = clinics.Where(sp => !sp.DedesignationDate.HasValue);
}
与-
private Expression<Func<VaccinationClinic, bool>> CheckDesignationIsActive(int desNumOfDays)
{
return sp => sp.Designations.OrderByDescending(r => r.DesignatedAt).FirstOrDefault().DesignatedAt.AddYears(sp.Designations.OrderByDescending(r => r.DesignatedAt).FirstOrDefault().NumberOfYears) >= DateTime.Now;
}
private Expression<Func<VaccinationClinic, bool>> CheckDesignationIsActivePart2(int desNumOfDays)
{
return sp => !((sp.Designations.OrderByDescending(r => r.DesignatedAt).FirstOrDefault().DesignatedAt.AddYears(sp.Designations.OrderByDescending(r => r.DesignatedAt).FirstOrDefault().NumberOfYears) > DateTime.Now) &&
(sp.Designations.OrderByDescending(r => r.DesignatedAt).FirstOrDefault().DesignatedAt.AddYears(sp.Designations.OrderByDescending(r => r.DesignatedAt).FirstOrDefault().NumberOfYears) <= DateTime.Now.AddDays(desNumOfDays)));
}
然后在最后-
var clinicList = await clinics.AsSplitQuery().ToListAsync();
return clinicList;
主要的 linq 查询在我们添加搜索条件之前需要时间加载,有没有办法加快它的速度?