Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ:数据范围内的最新数据总和_C#_Entity Framework_Linq_Linq To Sql - Fatal编程技术网

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

C# LINQ:数据范围内的最新数据总和,c#,entity-framework,linq,linq-to-sql,C#,Entity Framework,Linq,Linq To Sql,我的数据库中有一个快照表,保存约会可用性的历史数据 我正在尝试编写一个LINQ查询,以从最新快照中获取给定日期范围内可用地块的总数 我的桌子是这样的: 因此,有了这些给定的数据,我希望我的LINQ查询返回2018-01-01-2018-01-02日期范围内的可用地块和最新快照时间。因此,我希望查询返回4 这是我到目前为止所拥有的 var test = db.snapshots .GroupBy(g => g.AppointmentTime >= sta

我的数据库中有一个快照表,保存约会可用性的历史数据

我正在尝试编写一个LINQ查询,以从最新快照中获取给定日期范围内可用地块的总数

我的桌子是这样的:

因此,有了这些给定的数据,我希望我的LINQ查询返回2018-01-01-2018-01-02日期范围内的可用地块和最新快照时间。因此,我希望查询返回4

这是我到目前为止所拥有的

var test = db.snapshots
      .GroupBy(g =>
         g.AppointmentTime >= startDate &&
         g.AppointmentTime <= endDate
      ).Select(s => s.OrderByDesending(x => x.SnapShotTime).FirstOrDefault();
var测试=db.snapshots
.GroupBy(g=>
g、 预约时间>=开始日期&&
g、 AppointTimes s.OrderByDesending(x=>x.SnapShotTime).FirstOrDefault();

但是,我不确定如何将可用插槽的总和放入此LINQ查询。如果您能帮助编写此查询,我将不胜感激!

我看不出您编写的查询的确切含义,但根据您的解释,我认为类似的内容可能会起作用

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);
var query=db.snapshots
.其中(x=>x.AppointTime>=startDate&&
x、 任命时间x.可用地块);
以下是我所做的

    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;
    }
static void Main(字符串[]args)
{
DateTime startDate=新的日期时间();
DateTime endDate=新的日期时间();
List AppointsFromDatabase=新列表();
startDate和EndDate之间的var任命=来自数据库的任命。其中(p=>p.SnapshotTime>=startDate和p.SnapshotTime p.AvailableSlots);
Console.ReadKey();
}
公营假约会
{
公共日期时间快照时间;
公共int可用地块;
}

你的
GroupBy
应该是一个
Where
,然后你应该按快照时间分组并取最高组的总和。虽然我认为你应该按快照时间的分或秒部分分组?它们真的能等于毫秒吗?什么是“20:0101:137”表示?@NetMage,这只是日期时间的时间戳column@GertArnold,我该如何按分钟分组?这取决于快照时间的数据类型。这(对我来说)很少见格式让我想知道它是否是DateTime。没有对值的定义。我最终使用了类似的内容,但在结尾添加了以下内容:.Sum(x=>(int?)x.AvailableSlots)??0。