2010-12-06 101 views
1

我試圖抓住兩個日期之間的預訂。之間/時間範圍LINQ

有:

開始(日期時間)和時間(時間,時間跨度)..

我一派,並發現了其他幾個人有這些問題,因爲LINQ不會轉化爲T-SQL非常以及..

這是我的LINQ查詢和翻譯的T-SQL:http://pastebin.com/sLrpWLma

我見過有人在這裏創造了一些應該工作的擴展方法,但我不知道在哪裏把這個方法並修改哪些rs來使用它在我的查詢中可用? LINQ Between Operator

回答

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