2013-01-04 25 views
5

我的數據是這樣的:轉換數據集列出<double>和列表<string> C#

+=======+========+ 
| year |sales | 
+=======+========+ 
| 2008 |100000 | 
| 2009 |120040 | 
| 2010 |239000 | 
| 2011 |300900 | 
| 2012 |200900 | 
+=======+========+ 

我可以轉換一個數據集的雙和字符串列表?數據集的第一列將是list<string>,第二列是list<double>

是否有解決方案?感謝

+5

你嘗試過什麼?如果你循環訪問DataSet,幾乎就在那裏。 – RvdK

+0

什麼是數據集? – Tigran

+0

保持索引連接兩個列表通常不是一個好的設計。任何時候你看到貨幣價值(像「銷售」這樣的名字都表示貨幣),你應該使用十進制類型而不是雙倍。 –

回答

12

我不知道爲什麼一年是一個字符串,但是......

List<string> years = dataSet.Tables[0].AsEnumerable() 
          .Select(r => r.Field<string>(0)) 
          .ToList(); 
List<double> doubles = dataSet.Tables[0].AsEnumerable() 
          .Select(r => r.Field<double>(1)) 
          .ToList(); 

請注意,您需要添加using System.Linq;

您可以在DataRow或通過它的名字與列的順序使用Field extension方法:r.Field<string>("year")

+0

最好指定'r.Field (「年」)'和銷售額相同。 –

+0

@VishalSuthar:編輯我的答案,將其考慮在內。自從OP提到他們之後,使用了序數。 –

+0

好的..我沒有注意到.. +1對於.. @ TimSchmelter –

1

嘗試這樣;

List<string> years = dataSet.Tables[0].AsEnumerable() 
          .Select(n => n.Field<string>(0)) 
          .ToList(); 

and (1) for sales column。

不記得添加System.Data.DataSetExtensions命名空間。另請看MSDN DataTableExtensions.AsEnumerable()的方法。

返回一個IEnumerable對象,其中泛型參數T是 DataRow。該對象可用於LINQ表達式或方法查詢中。

0

1)

var myyear = ds.Tables[0].AsEnumerable() 
         .Select(r => new { 
           column1 = r.Field<string>("year") 
           }); 

List<string> year = myyear.ToList(); 

2)

var mysales = ds.Tables[0].AsEnumerable() 
          .Select(r => new { 
            column2 = r.Field<double>("sales") 
           }); 

List<double> sales = mysales.ToList(); 
相關問題