2016-08-05 72 views
0

我試圖過濾具有特定日期的SQL表中的所有行。它適用於列不可爲空的情況,但如果不成立則失敗。使用Linq過濾可空的日期時間字段

這適用於不能爲空日期時間字段:

ent.MyTable.Where(e => e.MyDate.Day == 12); 

顯然,這不是工作爲空的日期時間字段。做互聯網上的一些搜索後,我發現很多的「解決方案」這個問題看起來像到以下幾點:

ent.MyTable.Where(e => e.MyDate != null && e.MyDate.Day == 12); 

不幸的是,這並不爲我工作的。而這是可以理解爲什麼如果我認爲這是錯誤消息:

「System.Nullable」不包含「日」的定義,並沒有擴展方法「日」接受一個類型的第一個參數「System.Nullable」可以找到(是否缺少using指令或程序集引用?)

我想避免獲取所有 SQL行,然後在.NET濾波器,因爲我只對極少數行的興趣。有沒有其他的方式,我目前沒有看到?可空日期

ent.MyTable.Where(e => e.MyDate.HasValue && e.Date.Value.Day == 12); 
+0

是'MyDate'類中的定義爲可空'DateTime'?如果是這樣,你的第二行不應該編譯。如果不是,那麼你的模型與數據庫不匹配。 – user3185569

回答

1

使用價值屬性試試這個:

ent.MyTable.Where(e => e.MyDate.HasValue && e.MyDate.Value.Day == 12); 
+0

更正你的答案,應該是'ent.MyTable.Where(e => e.MyDate.HasValue && e.Date.Value.Day == 12);' –

+0

謝謝@AdilMammadov – Mostafiz

+0

@AdilMammadov'HasValue'和'! = null'對於可空類型是等效的。 – user3185569