我正在尝试查询一个SQLite数据库。我有两个桌子Doctor
和Appointment
。Appointment
表有两个可以为null的列,Date
(类型DateTime
)和Durata
(类型TimeSpan
),它们表示约会的持续时间。
var date = DateTime.Parse(request.Date);
var filteredDoctors = await _context.Doctors
.Where(d => d.Specializare == request.Speciality)
.Include(d => d.Appointments)
.Where(x => x.Appointments.Any(a => (a.Date != null && a.Date.Value.Date == date.Date) &&
(a.Date != null && date >= a.Date.Value) &&
((a.Date != null && a.Durata != null) && date <= System.Data.Entity.DbFunctions.AddMinutes(a.Date.Value, (int)a.Durata.Value.TotalMinutes))))
.ToListAsync(cancellationToken);
此查询不使用最后一个"&&“
&& date <= System.Data.Entity.DbFunctions.AddMinutes(a.Date.Value, (int)a.Durata.Value.TotalMinutes)
表达式a.Date.Value.Add(a.Durata.Value)
不起作用。我尝试了在堆栈溢出中找到的大多数解决方案,这是我最后一个版本。为了使这个查询工作,还有什么可以做的吗?
为了简化查询,我希望选择在指定的date
上不忙的所有医生
更新:错误似乎出现在System.Data.Entity.DbFunctions.AddMinutes()
方法中
更新2:包含System.Data.Entity.DbFunctions.DiffMinutes()
的更新查询
var filteredDoctors = await _context.Doctors
.Where(d => d.Specializare == request.Speciality)
.Include(d => d.Appointments)
.Where(x => !x.Appointments.Any(a => (a.Date != null && a.Date.Value.Date == date.Date) &&
(a.Date != null && date >= a.Date.Value) &&
(a.Date != null && a.Durata != null) &&
date <= System.Data.Entity.DbFunctions.AddMinutes(
a.Date.Value, System.Data.Entity.DbFunctions.DiffMinutes(TimeSpan.Zero, a.Durata.Value))))
.ToListAsync();
发布于 2021-06-17 22:21:44
好的,基于杜拉塔是一名在任命期间的时间点,以下内容应该有效:
date <= DbFunctions.AddMinutes(a.Date.Value,
DbFunctions.DiffMinutes(TimeSpan.Zero, a.Durata.Value))
https://stackoverflow.com/questions/68025797
复制相似问题