我正试图在两个日期之间捕捉预订。
有:
开始(日期时间)和小时(持续时间,TimeSpan)..
我用谷歌搜索并发现其他几个有这些问题,因为LINQ不能很好地转换为T-SQL ..
这是我的LINQ查询和翻译的T-SQL:http://pastebin.com/sLrpWLma
我已经看到有人在这里创建了一些应该可以工作的扩展方法,但我不知道在哪里放置这个方法以及在我的查询中使用哪些修饰符? LINQ Between Operator
答案 0 :(得分:0)
IMO部分问题在于架构;如果系统没有明确地开始和结束,那么系统总是会挣扎;不仅查询难以编写,而且还必须每行进行计算。
我会在表级别处理,例如使用持久计算列:
create table Booking (
Start datetime,
DurationMinutes int,
[End] AS (DATEADD(minute,(DurationMinutes),Start)) PERSISTED
)
现在你可以查询:
where b.Start >= someTime and b.End < someTime
(作为一个例子) - 它应该在TSQL中非常干净地映射。
因为它是一个计算列,所以你不能有一个不一致的End
值;并且因为它被标记为PERSISTED
,所以它不需要每行进行计算(除非你弄乱了SET
个选项......)。如果您愿意,甚至可以索引PERSISTED
列。