在我的数据库中,每分钟都有一条记录。我想只选择每十五分钟左右创建的每条记录。
以下代码显示了我当前如何执行此查询,但使用语句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();
如何只选择四分之一小时左右的记录,而不是所有记录?
答案 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}}