2012-11-15 76 views
1

我正在使用Linq查詢實體框架SQL數據庫。查詢緩存...如何清除?

這裏是我的代碼:

var found = this.keys.FirstOrDefault(r => r.Key.ToLowerInvariant() == key.ToLowerInvariant()); 

我收到以下錯誤:

LINQ to Entities does not recognize the method 'System.String ToLowerInvariant()' method, and this method cannot be translated into a store expression.

我及時把它改爲:

var found = this.keys.FirstOrDefault(r => r.Key.ToLower() == key.ToLower()); 

不過,我收到了同樣的錯誤。我用以下方式測試:

var found = this.keys.FirstOrDefault(); 

我仍然收到完全相同的錯誤。這是不知何故被緩存或什麼?任何幫助,將不勝感激。

謝謝!

+0

我很關心變量key.ToLower()?它與這個不同嗎? –

+0

對不起!是的,這是不同的。此方法採用關鍵參數並嘗試從數據庫中檢索值。要做到這一點,它將其轉換爲小寫。 (我理解定義一個變量是有意義的,但我認爲它並不適用於此示例。) – kodikas

+0

您確定保存了更改並正在測試之間重建項目嗎? –

回答

1

針對EF的查詢被轉換爲SQL,因此它會嘗試轉換您的查詢而不成功,因爲EF無法將許多LINQ表達式轉換爲對象。 你可以在msdn中找到更多相關信息。

+0

我完全理解,但問題不在於它無法翻譯ToLowerInvariant()方法,而是即使將其更改爲ToLower()(這是有效的),然後僅僅將其改爲FirstOrDefault(),它以某種方式緩存了以前的表達式。 – kodikas