介于/ Timerange LINQ之间

时间:2010-12-06 12:03:34

标签: c# visual-studio linq

我正试图在两个日期之间捕捉预订。

有:

开始(日期时间)和小时(持续时间,TimeSpan)..

我用谷歌搜索并发现其他几个有这些问题,因为LINQ不能很好地转换为T-SQL ..

这是我的LINQ查询和翻译的T-SQL:http://pastebin.com/sLrpWLma

我已经看到有人在这里创建了一些应该可以工作的扩展方法,但我不知道在哪里放置这个方法以及在我的查询中使用哪些修饰符? LINQ Between Operator

1 个答案:

答案 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列。