2011-03-13 135 views
3

在下面的查詢中,如何刪除detime時間部分的datetime列以獲得唯一的日期?linq查詢不同日期

using (var ctx = new DBConn()) 
{ 
    var q = ctx.Table.Select(r => r.datetimefield).Distinct(); 
} 
+0

這個問題有正確的答案,你想用EntityFunctions.TruncateTime http://stackoverflow.com/questions/11524853/distinct-date-with-linq – 2013-02-04 09:44:27

回答

10

你絆倒的故障與LINQ到SQL或EF(我不知道哪一個你正在使用)。直接的解決方案是使用DateTime.Date屬性,但是,這在兩個ORM中都不受支持,它不映射到SQL方法。

有兩種解決方法:

  1. 查詢急於評價使用ToList

    var q = ctx.Table.ToList().Select(r => r.datetimefield.Date).Distinct(); 
    
  2. 創建一個字段只詳細介紹在數據庫中的日期部分。這是我通常的做法,因爲您可以留在數據庫中並在那裏執行查詢。

+0

這個工作增加了r.datetimefield.Value.Date – user285677 2011-03-13 12:45:16

+0

是的,如果'datetimefield'是一個'可空的',你需要'Value'。但請注意,這會將查詢推入內存,這可能需要很長時間才能進行廣泛的查詢。你應該看看第二點,從長遠來看它會爲你節省很多麻煩。 – Femaref 2011-03-13 12:46:39

+0

其實,有辦法做到這一點,看到這個答案:http://stackoverflow.com/a/11525054/68818 – 2013-02-04 09:44:50

3

假設r.datetimefield是一個DateTime,您可以使用DateTime.Date刪除時間部分:

var q = ctx.Table.Select(r => r.datetimefield.Date).Distinct(); 
+0

你不能,至少不能用linq-to-sql或EF作爲'Date'屬性不映射到SQL方法。 – Femaref 2011-03-13 12:35:31

+0

日期屬性可通過value.date但我得到的錯誤「指定的類型成員'日期'不支持在LINQ to實體」 – user285677 2011-03-13 12:39:27

+0

是的,這就是我暗示。您不能在查詢中使用Date屬性,因爲EF不會將其映射到SQL方法。我個人認爲這是一個巨大的錯誤。 – Femaref 2011-03-13 12:40:41