簡體   English   中英

如何使用C#執行使用LINQ從SQL進行類型轉換的求和數據

[英]How to use c# to perform summing data with type conversion from SQL using LINQ

我試圖總結一個類型為nvarchar(7)的列,我首先需要將數據轉換為decimal(18, 7)

我使用此LINQ查詢:

var Data = queryBase.Select(q => new { totalVol = q.Collection.Sum(c => Convert.ToDecimal(c.Volume) }).FirstOrDefault();

但是我有一個例外

LINQ to Entities無法識別方法'System.Decimal ToDecimal(System.String)'方法...

任何幫助將不勝感激。

錯誤非常明顯。 EF未編程為將Convert.ToDecimal調用轉換為SQL。

一些選項:

  • 手動編寫等效的SQL,然后使用ExecuteQuery調用它
  • 在數據之上創建一個視圖,該視圖將字符串轉換為數字並進行查詢。
  • 將所有數據拉入內存,並進行Linq-to-Objects中的轉換/求和。

您可以在執行Sum之前使用Cast<double> ,如果數據庫無法轉換字符串,這將引發異常

var Data = 
    queryBase.Select(q => 
       new 
       { 
          totalVol = q.Collection
                      .Select(c => c.Volume)
                      .Cast<double>()
                      .Sum()   
       }
     ).FirstOrDefault();

由於必須將Convert.ToDecimal轉換為SQL,因此EF不知道該怎么做。

因此,請首先執行queryBase.ToList() (這將執行SQL,並且所有數據都作為對象存儲在內存中)。

為了最大程度地減少檢索到的數據的大小,請執行以下操作: queryBase.Select(/*here filter the string field*/).ToList().

然后,使用ConvertDecimal.Parse求和

嘗試這樣的事情:

var Data = queryBase.Select(c =>c.Volume).AsEnumerable().Sum(d => Convert.ToDecimal(d.Volume));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM