2017-06-18 106 views
0

下面顯示的運行時錯誤如下所示。雖然它編譯罰款:LINQ Sum()函數在未使用ToList()的情況下失敗

float? totalSum = (from t in _context.Orders 
       join c in _context.Customers.Where(c => c.region=="NW") 
       on t.CustomerId equals c.CustomerId 
     select t.price).Sum(); 

錯誤

Unable to cast object of type 'System.Double' to type 'System.Nullable`1[System.Single]'. 

但接下來的工作(唯一的區別是,我使用ToList()應用.Sum()前 - 但根據definition of Sum()它應該不工作正確?

float? totalSum = (from t in _context.Orders 
       join c in _context.Customers.Where(c => c.region=="NW") 
       on t.CustomerId equals c.CustomerId 
     select t.price).ToList().Sum(); 

UPDATE

price屬性的數據類型爲float?映射到數據類型real在SQL Server 2012中

+0

什麼是所有變量和屬性的實際類型?你的實體如何映射?這個錯誤表明,「價格」不是「浮動」,或者你的映射混亂了。 –

+0

@JeffMercado在閱讀您的評論後,我再次檢查以確認'價格'確實是'浮動'? – nam

+0

嘗試使用'select t.price? 0.0f'代替。顯然有些東西搞砸了翻譯,因此避開問題領域可能會解決這個問題。但是,仍然...這將有助於查看_actual_類定義和_actual_映射......沒有足夠的信息來診斷問題,但您仍然沒有提供該信息。 –

回答

0

選擇t.price

可能會產生您收到該錯誤消息,空反映。要麼檢查爲空:

select t.price ?? 0.0f

或者去.ToList(); 你也可以實現你自己的Sum()來檢查null。

+2

但是爲什麼它與ToList()一起工作? – MetaColon

+0

ToList()?實例化一個默認值設置爲0的新對象,IEnumerable可以填充任何實現了IEnumerable包含[]的任何東西。 – map

相關問題