C# LINQ:数据范围内的最新数据总和
我的数据库中有一个快照表,保存约会可用性的历史数据 我正在尝试编写一个LINQ查询,以从最新快照中获取给定日期范围内可用地块的总数 我的桌子是这样的: 因此,有了这些给定的数据,我希望我的LINQ查询返回2018-01-01-2018-01-02日期范围内的可用地块和最新快照时间。因此,我希望查询返回4 这是我到目前为止所拥有的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
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。