Convert DataTable to List of Object – 把DataTable轉成List Of Object

學習ASP.Net MVC 3 的挑戰開始了…
之前使用ASP.Net Web Application 時很多時候都是使用DataTable的
[使用DataAdapter 來取得資料..之後再把資料放進Drop Down List, GridView等 控件上]
但是在MVC 行多時候都會用到Model 的… [好像是沒有DataTable的概念…]

可惜DataTable 是沒有一個method 可以直接把DataTable 轉成一個List of Object
我想到的其中一個方法是寫一個ForLoop之後 把資料一個一個地取出..
之後再建立一個Object..之後再把這個Object 加到這個List 上

以下的Sample會用到我之前所建立的Dummy DataTable 的Class 來populate這些DataTable的data

由於我們要建立一個Object的關係..
我們先要準備一個Class來建立一個Object 儲存每一個DataRow的資料..
之後把這些Object 都加進List

E.G.
C#

ShareChiWai_Model Share_ChiWai = new ShareChiWai_Model();
DataTable tbl = Share_ChiWai.Get_Food_Tbl();

List<Food> Food_List = new List<Food>();
for (int i = 0; i < tbl.Rows.Count; i++)
{
    Food_List.Add(new Food()
    {
        Food_ID = (string)tbl.Rows[i]["Food_ID"],
        Food_Name = (string)tbl.Rows[i]["Food_Name"],
        FoodCategory_ID = (string)tbl.Rows[i]["FoodCategory_ID"],
        Price = (decimal)tbl.Rows[i]["Price"]
    });
}

之後找到另一個方法
就是用LINQ

解決方法
C#

ShareChiWai_Model Share_ChiWai = new ShareChiWai_Model();
DataTable tbl = Share_ChiWai.Get_Food_Tbl();

List<Food> Food_List = new List<Food>();
Food_List = (from l in tbl.AsEnumerable() /* Assume Linq to SQL */
 select new Food() { Food_ID = l.Field<string>("Food_ID"),
         Food_Name = l.Field<string>("Food_Name"),
         FoodCategory_ID = l.Field<string>("FoodCategory_ID"),
         Price = l.Field<decimal>("Price")

 }).ToList<Food>();

Hope you find it useful

One thought on “Convert DataTable to List of Object – 把DataTable轉成List Of Object

  1. Pingback: .Net Convert List of Object To DataTable | Share ChiWai/Share 智慧/智慧分享 – 技術分享/Tech Blog

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.