我有一個SQL查詢是如下:任何人都可以將此SQL查詢轉換爲C#Linq語句嗎?
SELECT [ClientId]
,[LastDelivery]
,[LastRequisitionDate]
,Datediff (day, LastRequisitionDate, LastDelivery) as DiffDate
FROM [dbo].[App_Client]
where (LastDelivery != '1900-01-01 00:00:00'
and LastRequisitionDate != '1900-01-01 00:00:00')
and Inactive = 0
and (Datediff (day, LastRequisitionDate, LastDelivery) < 9)
and (Datediff (day, LastRequisitionDate, LastDelivery) >= 0)
我有客戶名單,我想誰內的徵地8天收到他們送的所有客戶端。究其原因,
LastDelivery != '1900-01-01 00:00:00'
and LastRequisitionDate != '1900-01-01 00:00:00'
是因爲我有我的C#查詢方式需要有任何的日期字段(這些字段是在數據庫爲空的,但他們確實不應該)沒有空場。我有一個包含11838個客戶端的數據庫,並且此查詢返回10404.我的問題是我一直無法使用C#linq複製此查詢。
我的C#查詢如下:
var clients = _clientService.GetAllClients().Where(x =>
(x.LastDelivery != Convert.ToDateTime("01/01/1900")
&& x.LastRequisitionDate != Convert.ToDateTime("01/01/1900"))
&& x.Inactive == 0
&& (((DateTime)x.LastDelivery - (DateTime)x.LastRequisitionDate).Days < 9)
&& (((DateTime)x.LastDelivery - (DateTime)x.LastRequisitionDate).Days >= 0)).ToList();
該查詢返回結果10563,159的差別,我想不出在所有我要去哪裏錯了。對我來說,C#查詢看起來與SQL相同,但在某處存在差異。我一整天都在編寫代碼,所以也許我已經被燒燬了,解決辦法很明顯,但我看不到它。任何人都可以幫助,或者提出我可能做錯了什麼或忽略了什麼?
回答
由於正確地由馬特·史密斯低於指出,事實證明,這兩個查詢是正確的 - 這種差異在SQL DateDiff函數,該措施1.天情人節過後的午夜,這意味着在比較01爲打好/ 01/2016 23:59:59和01/02/2016 00:00:01給出了一天的差異,而在我的C#查詢中,它將幾天中的實際差異作爲時間跨度(24小時)進行比較。感謝馬特史密斯,我們有很好的發現和重要的區別。
一個可以簡單地將SQL查詢轉換爲LINQ! – dotctor
好吧,將生成的SQL與原始SQL進行比較。 – TomTom
我不知道該怎麼做...... – necrofish666