查询是c#中的linq,它比较我输入的开始和结束日期,间隔始终为15分钟。
将此启动和停止与数据库startDB和stopDB进行比较。即使数据库中有可用数据,也不会返回任何内容。
输入:my_startTime:上午11点15分& my_stopTime:上午11点30分
与数据库相比:startTime:上午10:00&停止时间:中午12点
我的查询是
var data = DbUpdateLoop.context.EnergyPeakInfo_Tbl
.Where(x => (my_startTime >= x.StartTime) && (my_stopTime <= x.StopTime))
.FirstOrDefault();
if (data == null)
{
MsgBox = "No data available in DB";
}
此处,DbUpdateLoop.context
是我的DbContext
,EnergyPeakInfo_Tbl
是我的表名,我的数据库中包含以下数据:
EID datetime.now type startTime EndTime
1 8/23/2016 11:06 AM 2 OFF 8/23/2016 10:45 AM 8/23/2016 11:15 AM 0
2 8/23/2016 11:06 AM 0 ON 8/23/2016 11:15 AM 8/23/2016 12:00 PM 0
有时获取数据但有时会说空...这是什么原因? 我尝试给它my_startTime.date和my_stopTime.date但是没有工作
答案 0 :(得分:0)
我修改了查询,以下内容应该按预期工作:
var result = TimeTables
.Where (
c =>
(((c.StartTime >= (DateTime?)(DateTime.Parse("14:20:00"))) &&
(c.StopTime <= (DateTime?)(DateTime.Parse("15:30:00")))
) ||
((c.StopTime <= (DateTime?)(DateTime.Parse("15:30:00"))) &&
(c.StopTime >= (DateTime?)(DateTime.Parse("14:20:00")))
)
)
)
或者更具体地说是时间:从DateTime仅提取时间 - c.StartTime.Value.TimeOfDay
TimeTables
.Where (
c =>
(((c.StartTime.Value.TimeOfDay >= (TimeSpan.Parse("14:20:00"))) &&
(c.StopTime.Value.TimeOfDay <= (TimeSpan.Parse("15:30:00")))
) ||
((c.StopTime.Value.TimeOfDay <= (TimeSpan.Parse("15:30:00"))) &&
(c.StopTime.Value.TimeOfDay >= (TimeSpan.Parse("14:20:00")))
)
)
)
请记住,您必须将12小时时间格式转换为24作为输入。 顺便说一句,我使用的表结构如下:
Table - TimeTables:
ID - StartTime - StopTime
1 - 2016-08-23 13:00:00.000 - 2016-08-23 14:00:00.000
2 - 2016-08-23 14:00:00.000 - 2016-08-23 15:00:00.000