2012-01-12 46 views
2

大家好! )) 這裏是代碼。LINQ 2實體 - 查詢不起作用,但爲什麼?

var existingEntities = (from record in globalOne.serviceContext.records_out 
         where record.timestamp.Date == DateTime.Now.Date 
         select record).ToList(); 

它不起作用。

另一個代碼:

var existingEntities = (from record in globalOne.serviceContext.records_out 
       where record.timestamp.Day == DateTime.Now.Day 
       select record).ToList(); 

它的工作。

所以,問題編號的下一個字符串:

where record.timestamp.**Date** == DateTime.Now.Date 

也不會做

where record.timestamp.Date.Equals(DateTime.Now.Date) 

但是,爲什麼?我沒有任何線索。 「時間戳」字段是MS SQL SERVER中的dateTime字段。 而且 - 表中有NO記錄。

我幾乎忘了 - 這是什麼意思 - 「不起作用」。 應用程序不會在那個查詢(第一個)之後到達斷點,沒有任何錯誤,沒有任何東西。

謝謝。

+0

當你在調試器中點擊「break」會發生什麼?它在做什麼? – 2012-01-12 23:22:17

+0

應用程序在第一次查詢後永遠不會到達斷點。 – Monochromie 2012-01-13 04:38:34

回答

2

您可以調用record.timestamp.Date,因爲EF無法將其轉換爲所需的表達式樹(然後將其轉換爲sql命令)。實際上EF支持有限數量的功能和屬性,但對於DateTime,EF有一些好的Canonical functions。您可以使用它們,例如,您可以使用Day(),Month(),Year()函數來解決您的問題(請參閱鏈接)。

+0

謝謝。但爲什麼record.timestamp.day工作? – Monochromie 2012-01-13 19:36:14

+0

@Monochromie,我不能說爲什麼,應該看到實施的一天,但我想這是一個簡單的屬性沒有複雜的規則,它可以被轉換,正如我所提到的,EF支持少量的屬性是簡單的屬性。 – 2012-01-14 14:16:12