我的数据库中有一个快照表,其中包含约会可用性的历史数据。
我正在尝试编写LINQ查询以从最新快照中获取给定日期范围内的可用插槽总数。
这是我的桌子的样子:
因此,使用给定的数据,我希望我的LINQ查询返回日期范围为2018-01-01-2018-01-02以及最新的SnapShotTime的AvailableSlots之和。因此,我希望查询返回4。
这是我到目前为止所拥有的。
var test = db.snapshots
.GroupBy(g =>
g.AppointmentTime >= startDate &&
g.AppointmentTime <= endDate
).Select(s => s.OrderByDesending(x => x.SnapShotTime).FirstOrDefault();
但是,我不确定如何将可用插槽总数添加到此LINQ查询中。编写此查询的任何帮助将不胜感激!
答案 0 :(得分:0)
我没有完全看到您编写的查询,但是根据您的解释,我认为这样可能有用
var query=db.snapshots
.Where(x=>x.AppointmentTime >= startDate &&
x.AppointmentTime <= endDate)
.GroupBy(x=>x.SnapShotTime)
.OrderByDesending(g=>g.Key)
.Take(1)
.Sum(x=>x.Value.AvailableSlots);
或者如果看起来如此复杂,最好先这样获取最新日期
var latest=db.snapshots
.OrderByDesending(x => x.SnapShotTime)
.FirstOrDefault().SnapShotTime;
然后得到这样的计数
var query=db.snapshots
.Where(x=>x.AppointmentTime >= startDate &&
x.AppointmentTime <= endDate &&
x.SnapShotTime==latest)
.Sum(x=>x.AvailableSlots);
答案 1 :(得分:0)
这就是我所做的。
static void Main(string[] args)
{
DateTime startDate = new DateTime();
DateTime endDate = new DateTime();
List<FakeAppointments> appointmentsFromDatabase = new List<FakeAppointments>();
var appointmentsBetweenStartDateAndEndDate = appointmentsFromDatabase.Where(p => p.SnapshotTime >= startDate && p.SnapshotTime <= endDate).ToList();
int sum = appointmentsBetweenStartDateAndEndDate.Sum(p => p.AvailableSlots);
Console.ReadKey();
}
public class FakeAppointments
{
public DateTime SnapshotTime;
public int AvailableSlots;
}