.Net Convert DataRow to List of String – .Net 把DataRow 轉成 字符串列表

今天需要幫公司寫一個Export CSVModule
由于Database上的資料有機會令到 Export 到CSV上的數據無法再讀回到一個DataTable
E.G. 如果數據上有一些 Speech Markcomma的話..

有機會令到讀的程式當他們是另一個CSV Field
所以便要寫一個功能去把DataRowField Extract 出來之後再在每一個Filter上Escape那些有機會構成問題的Field
之後再Export 成CSV
大家可以使用For Loop來把Field Extract出來..
我比較喜歡用LINQ 因為他可以減少程式碼的數量

如何可以把DataRow 轉成List Of String 呢?

解決方法 十分簡單
我們可以使用DataRow的 ItemArray功能把 DataRow內容 Export成Array..
之後便用LINQ 的方法把ItemArray的內容轉換成 String
之後再用.ToList()這個方法把這個 LINQ的結果轉成List便可以了

我會使用之前和大家分享的Sample DataTable  和大家作一個示範

Sample data for DataTable for testing – 我的DataTable 的 資料樣本
E.G. 使用LINQDataRowItemArray 輸出的結果轉換成List Of String

// 把DataRow的Field Extract出來成List Of String 
	List contents = dr1.ItemArray.Select(c => Convert.ToString(c)).ToList(); 

Full Sample Code:

    DataTable tbl = new DataTable();
    tbl.Columns.Add(new DataColumn("Food_ID", Type.GetType("System.String")));
    tbl.Columns.Add(new DataColumn("Food_Name", Type.GetType("System.String")));
    tbl.Columns.Add(new DataColumn("Price", Type.GetType("System.Decimal")));
    tbl.Columns.Add(new DataColumn("FoodCategory_ID", Type.GetType("System.String")));
            
    // Create Data Row
    DataRow dr1 = tbl.NewRow();
    dr1["Food_ID"] = "00001";
    dr1["Food_Name"] = "Apple";
    dr1["Price"] = 0.99;
    dr1["FoodCategory_ID"] = "00001";
    tbl.Rows.Add(dr1);
	
	// 把DataRow的Field Extract出來成List Of String 
	List contents = dr1.ItemArray.Select(c => Convert.ToString(c)).ToList(); 
	
	// 輸出結果 - List Of String上有多小 Item
	Console.WriteLine("Number of Items in List of String: " + contents.Count().ToString() );
	
	//使用For Loop把 結果輸出
	for(int i = 0; i<contents.Count; i++ ){
		Console.WriteLine(contents[i]);
	}

結果:
.Net - Convert DataRow to List of String
Hope you find it useful