我有以下Linq To Entites查詢。當我從控制檯應用程序執行此查詢時,它會生成SQL並完美執行。實體框架Min Aggregate在網站上崩潰,但在控制檯應用程序上運行?
但是,當我從Web應用程序執行它時,我收到一條錯誤消息,說Min()函數不能被Linq To Entites識別,並且它不能被轉換爲存儲表達式。
這是完全相同的查詢。兩個項目在配置文件中都具有相同的設置(涉及EF 6),並且它們引用相同的程序集。
from ce in db.CustomEvents
where ce.fld_start > DateTime.Now
group ce by ce.fld_ownerId into g
select new
{
fld_ownerId = g.Key,
next_appointement_date = g.Min(i => i.fld_start)
}
看來出現這種情況只有在MIN聚合是DateTime的屬性。例如,當我在小數點上有Min時,我沒有這個問題。
錯誤消息,當我在網站上執行此我得到的是這種
LINQ to Entities does not recognize the method 'System.Nullable`1[System.DateTime]
Min[CustomEvent](System.Collections.Generic.IEnumerable`1[CustomEvent],
System.Func`2[CustomEvent,System.Nullable`1[System.DateTime]])'
method, and this method cannot be translated into a store expression.
但是,當我從控制檯應用程序執行它,它成功地產生下面的SQL語句
SELECT
1 AS [C1],
[GroupBy1].[K1] AS [fld_ownerId],
[GroupBy1].[A1] AS [C2]
FROM (SELECT
[Extent1].[fld_ownerId] AS [K1],
MIN([Extent1].[fld_start]) AS [A1]
FROM [dbo].[mtbl_CustomEvent] AS [Extent1]
WHERE [Extent1].[fld_start] > (SysDateTime())
GROUP BY [Extent1].[fld_ownerId]
) AS [GroupBy1]
有誰知道發生了什麼?爲什麼相同的查詢在控制檯應用程序中運行時會生成SQL,但在網站中運行時會失敗併產生異常?
UPDATE:
看來這個問題是的Min<T>(this IEnumerable<T>)
兩種不同的實現之間的模糊性(.NET的實現,和我們自己的實現)。刪除「使用OurLibrary;」該文件的命名空間解決了問題。
控制檯應用程序和Web應用程序是否以.net的相同版本爲目標? – vittore
當你連接到w3並逐步完成查詢時,你也有同樣的問題嗎? – vittore
是的,兩者都是同一解決方案中的項目。 .net 4.5.1,EF6。我打開一個DbContext,執行查詢。ToList()最後,我處理了DbContext。 我附加調試器時遇到同樣的問題。沒有不同。但是,當我取一個小數的屬性,而不是一個DateTime屬性,我沒有這個問題。 對我來說似乎很奇怪。錯誤可能? –