2017-02-24 77 views
-2

我有這樣的代碼:投自IEnumerable <object>到IEnumerable的<decimal>

IDictionary<string, IEnumerable<object>> setValues = new Dictionary<string, IEnumerable<object>>() 
{ 
    { "IN_PARTENER", dtResult.Rows.Cast<DataRow>().Select(row => row["IN_PARTENER"]) }, 
    { "IN_DATA", dtResult.Rows.Cast<DataRow>().Select(row => row["IN_DATA"]) }, 
    { "IN_VALOARE", dtResult.Rows.Cast<DataRow>().Select(row => row["IN_VALOARE"]) }, 
    { "OUT_PARTENER", dtResult.Rows.Cast<DataRow>().Select(row => row["OUT_PARTENER"]) }, 
    { "OUT_DATA", dtResult.Rows.Cast<DataRow>().Select(row => row["OUT_DATA"]) }, 
    { "OUT_VALOARE", dtResult.Rows.Cast<DataRow>().Select(row => row["OUT_VALOARE"]) }, 
    { "TOTAL_ZI", dtResult.Rows.Cast<DataRow>().Select(row => row["TOTAL_ZI"]) }, 
}; 

我想爲字符串IN_VALOAREOUT_VALOAREstringdecimal轉換,但我不知道該怎麼辦呢

回答

4

您可以在Select之內執行此操作:

.Select(row => (decimal)row["IN_VALOARE"]) 

全碼:

IDictionary<string, IEnumerable<object>> setValues = new Dictionary<string, IEnumerable<object>>() 
{ 
    { "IN_PARTENER", dtResult.Rows.Cast<DataRow>().Select(row => row["IN_PARTENER"]) }, 
    { "IN_DATA", dtResult.Rows.Cast<DataRow>().Select(row => row["IN_DATA"]) }, 
    { "IN_VALOARE", dtResult.Rows.Cast<DataRow>().Select(row => (decimal)row["IN_VALOARE"]) }, 
    { "OUT_PARTENER", dtResult.Rows.Cast<DataRow>().Select(row => row["OUT_PARTENER"]) }, 
    { "OUT_DATA", dtResult.Rows.Cast<DataRow>().Select(row => row["OUT_DATA"]) }, 
    { "OUT_VALOARE", dtResult.Rows.Cast<DataRow>().Select(row => (decimal)row["OUT_VALOARE"]) }, 
    { "TOTAL_ZI", dtResult.Rows.Cast<DataRow>().Select(row => row["TOTAL_ZI"]) }, 
}; 

既然你不能用不同的值類型的字典(沒有得到哈克),也許你應該看看使用自定義類,而不是:

public class MyThing 
{ 
    public string InPartener { get; set; } 
    public string InData { get; set; } 
    public decimal InValoare { get; set; } 
    public string OutPartener { get; set; } 
    public string OutData { get; set; } 
    public decimal OutValoare { get; set; } 
    public string TotalZi { get; set; } 
} 

,並將這些名單類:

var myThings = dtResult.Rows.Cast<DataRow>().Select(r => new MyThing 
{ 
    InPartener = r["IN_PARTENER"], 
    InData = r["IN_DATA"], 
    InValoare = (decimal)r["IN_VALOARE"], 
    OutPartener = r["OUT_PARTENER"], 
    OutData = r["OUT_DATA"], 
    OutValoare = (decimal)r["OUT_VALOARE"], 
    TotalZi = r["TOTAL_ZI"] 
}; 
+0

我試過,但我得到這個錯誤:無法轉換自IEnumerable 到IEnumerable的 user7383186

+0

那麼你正在試圖將其存儲在一個不兼容的字典了,但是這是一個不同的問題。 – DavidG

+0

我該怎麼辦? – user7383186

1

您可以添加decimal.Parse內選擇了IN_VALOARE部分

{ "IN_VALOARE", dtResult.Rows.Cast<DataRow>().Select(row => decimal.Parse(row["IN_VALOARE"].ToString())) }, 

這給

IDictionary<string, IEnumerable<object>> setValues = new Dictionary<string, IEnumerable<object>>() 
     { 
      { "IN_PARTENER", dtResult.Rows.Cast<DataRow>().Select(row => row["IN_PARTENER"]) }, 
      { "IN_DATA", dtResult.Rows.Cast<DataRow>().Select(row => row["IN_DATA"]) }, 
      { "IN_VALOARE", dtResult.Rows.Cast<DataRow>().Select(row => decimal.Parse(row["IN_VALOARE"].ToString())) }, 
      { "OUT_PARTENER", dtResult.Rows.Cast<DataRow>().Select(row => row["OUT_PARTENER"]) }, 
      { "OUT_DATA", dtResult.Rows.Cast<DataRow>().Select(row => row["OUT_DATA"]) }, 
      { "OUT_VALOARE", dtResult.Rows.Cast<DataRow>().Select(row => row["OUT_VALOARE"]) }, 
      { "TOTAL_ZI", dtResult.Rows.Cast<DataRow>().Select(row => row["TOTAL_ZI"]) }, 
     }; 
0

首先,如果需要IEnumerable<object>那麼你其實並不需要轉換字段值轉換爲十進制或另一種類型。

第二,如果你需要得到你的字典中的所有列,那麼所有的代碼可以簡化爲:

var setValues = dtResult.Columns.Cast<DataColumn>() 
     .ToDictionary(c => c.ColumnName, 
        c => dtResult.AsEnumerable().Select(r => r.Field<object>(c))); 

就這麼簡單 - 讓所有列,然後創建一個列名字典作爲鍵將列值作爲值進行收集。


注:這取決於你的需求,還要考慮與強類型的實體,而不是字典,字符串和對象一起工作。即定義實體

public class Transaction // chose good name here 
{ 
    public string InPartener { get; set; } 
    public string InData { get; set; } 
    public decimal InValoare { get; set; } 
    public string OutParener { get; set; } 
    public string OutData { get; set; } 
    public decimal OutValoare { get; set; } 
    public string TotalZi { get; set; } 
} 

使用LINQ到數據集的數據錶轉換成強類型對象的集合:

var transactions = from r in dtResult.AsEnumerable() 
        select new Transaction { 
         InPartener = r.Field<string>("IN_PARTENER"), 
         InData = r.Field<string>("IN_DATA"), 
         InValoare = r.Field<decimal>("IN_VALOARE"), 
         OutPartener = r.Field<string>("OUT_PARTENER"), 
         OutData = r.Field<string>("OUT_DATA"), 
         OutValoare = r.Field<decimal>("OUT_VALOARE"), 
         TotalZi = r.Field<string>("TOTAL_ZI") 
        }; 

這會給你inteli感覺很好支持強類型的商業模式。例如。如果你需要計算總InValoare:

decimal total = transactions.Sum(t => t.InValoare); 
相關問題