仅选择特定时间前后的记录

本文关键字:记录 定时间 选择 | 更新日期: 2023-09-27 18:34:23

在我的数据库中,每分钟都有一条记录。我只想选择大约每 15 分钟创建的每条记录。

以下代码显示了我当前如何执行此查询,但使用以下语句:v.CreateTime > v.CreateTime < endDate),我只声明我想获取数据的日期之间。

我想要:15, :30, :45, :00时间的数据.此外,在那些时间没有精确输入的数据。例如,12:15:23是可能的,但12:14.43也是可能的。

vafDataList = service.LoadVesselRecord<VafData>(v => 
      v.TypeNo == RecordObjectTypes.VafData && 
      v.Vessel_No == vesselNo && 
      v.CreateTime > startDate && 
      v.CreateTime < endDate)
  .OrderBy(t => t.CreateTime)
  .ToList();

如何仅选择大约四分之一小时的记录,而不是所有记录?

仅选择特定时间前后的记录

您只需选择这些分钟的记录:

.Where(t => new int[] { 0, 15, 30, 45 }.Contains(t.CreateTime.Minute))

但是,假设您的LoadVesselRecord()调用在DbSet上执行的Where(),则实体框架无法将其转换为查询,因此您必须使用 SqlFunctions 扩展让实体框架将其转换为 DATEPART SQL 语句:

.Where(t => new int[] { 0, 15, 30, 45 }
            .Contains(SqlFunctions.DatePart("minute", t.CreateTime)))