仅选择特定时间周围的记录

时间:2016-02-12 10:00:22

标签: c# database entity-framework filter

在我的数据库中,每分钟都有一条记录。我想只选择每十五分钟左右创建的每条记录。

以下代码显示了我当前如何执行此查询,但使用语句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();

如何只选择四分之一小时左右的记录,而不是所有记录?

1 个答案:

答案 0 :(得分:2)

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

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

但是,如果您的LoadVesselRecord()调用Where()来执行DbSet,则实体框架无法将其转换为查询,因此您必须拥有SqlFunctions使用DATEPART扩展来让Entity Framework将其转换为.Where(t => new int[] { 0, 15, 30, 45 } .Contains(SqlFunctions.DatePart("minute", t.CreateTime))) SQL语句:

{{1}}