2016-07-26 206 views
-1

該表達式是否正確構建?Linq枚舉沒有結果

var avTimes = db.AvailableTimes.Where(m => m.TimeOfAppointment >= new DateTime(date.Year, date.Month, date.Day, 08, 00, 00) 
               && m.TimeOfAppointment <= new DateTime(date.Year, date.Month, date.Day, 16, 00, 00) 
               && m.StateOfBooking == 1 
               && m.ProviderId == id); 

它給出「linq枚舉不產生任何結果」作爲輸出。

+1

如果db是數據庫上下文,那麼看起來好像你只有IQurable查詢,爲了向數據庫提出實際的請求,你應該使用ToList(),ToDictionary()e.t.c.方法 – Vladimir

+4

如果它不產生任何結果,那意味着'AvailableTimes'中沒有與您提供謂詞匹配的實體。你真的可以驗證上述集合中有一個實體能夠通過所有這些檢查嗎? – Falgantil

+1

如果將鼠標懸停avTimes,您可以獲取查詢生成的SQL。這樣你可以檢查數據庫中是否有任何項目。 – smoksnes

回答

1

枚舉不產生結果是運行時告訴你,你的查詢沒有找到你的參數的任何匹配結果。有兩種調試方法:

1)啓動SQL事件探查器並開始跟蹤,檢查查看獲取生成並運行查詢分析器來更好地理解您的查詢。

2)將您的查詢修剪回無參數,確保它產生結果,然後每次添加每個參數/細化,觀察者如何改變行爲以更好地理解它。

-1

該表達式是否正確構建?

我會將DateTime值的實例移出linq語句。將方法移入linq語句可能會導致出現如下異常:這不能轉換爲sql語句

DateTime dtTimeOfAppointmentFrom = new DateTime(date.Year, date.Month, date.Day, 08, 00, 00); 
DateTime dtTimeOfAppointmentTo = new DateTime(date.Year, date.Month, date.Day, 16, 00, 00); 

var avTimes = db.AvailableTimes.Where(m => m.TimeOfAppointment >= dtTimeOfAppointmentFrom 
            && m.TimeOfAppointment <= dtTimeOfAppointmentTo 
            && m.StateOfBooking == 1 
            && m.ProviderId == id); 

LINQ枚舉沒有產生任何結果只是說,沒有行發現,MEED你的病情。所以你可以通過在sql瀏覽器中輸入語句並比較結果來驗證結果。