LINQ:数据范围内的最新数据总和

时间:2018-08-23 19:05:35

标签: c# entity-framework linq linq-to-sql

我的数据库中有一个快照表,其中包含约会可用性的历史数据。

我正在尝试编写LINQ查询以从最新快照中获取给定日期范围内的可用插槽总数。

这是我的桌子的样子:

enter image description here

因此,使用给定的数据,我希望我的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查询中。编写此查询的任何帮助将不胜感激!

2 个答案:

答案 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;
    }