2017-09-01 28 views
2

我需要在一個數據表中執行求和函數與LINQLINQ查詢字段<T>用動態型

var query = from row in data.AsEnumerable() 
      group row by row.Field<string>("ID") into grp 
      select new 
      { 
       Id = grp.Key, 
       sum = grp.Sum(r => r.Field<decimal>("AMOUNT")) 
      }; 

的問題是,該領域量並不總是小數但有時也可能是Int64類型或的Int32。所以當字段是Int32,我得到一個異常,演員投票無效

是否有一種方法可以在sum函數中有一個動態的字段類型?

+0

要小心,一旦你把'.AsEnumerable()'你不再在你的記憶 –

+1

的數據庫中你使用EF? –

+0

@ TitianCernicova-Dragomir不完全正確,但它意味着您對它做出的任何操作(即'.Where(...)'或'.Single(...)')可能會導致數據被物化到內存中。 – DavidG

回答

1

在這種情況下Convert.ToDecimal是完美的與所有數字類型的作品(IConvertible):

var query = from row in data.AsEnumerable() 
      group row by row.Field<string>("ID") into grp 
      select new 
      { 
       Id = grp.Key, 
       sum = grp.Sum(r => Convert.ToDecimal(r["AMOUNT"]) 
      };