如何将DataTable转换为C#中的对象类型List

我想在C#中将DataTable转换为List 。 这是我的代码。 但它没有用。 请帮我

 public List ShowMessage() { List obj = new List(); DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Name"); dt.Rows.Add("1","AAA"); dt.Rows.Add("2", "BBB"); dt.Rows.Add("3", "CCC"); foreach (DataRow dr in dt.Rows) { obj.Add(dr); } return obj; } 

这是错误 –

在此处输入图像描述

如果列表对象有任何Typed DataType,就像这样

 public class MyObj { public string Name { get; set; } public int ID { get; set; } } 

那么你可以这样做

 private List test(DataTable dt) { var convertedList = (from rw in dt.AsEnumerable() select new MyObj() { ID = Convert.ToInt32(rw["ID"]), Name = Convert.ToString(rw["Name"]) }).ToList(); return convertedList; } 

或者如果你仍然想要List那么就这样做

 private List GetListByDataTable(DataTable dt) { var reult = (from rw in dt.AsEnumerable() select new { Name = Convert.ToString(rw["Name"]), ID = Convert.ToInt32(rw["ID"]) }).ToList(); return reult.ConvertAll(o => (object)o); } 

我希望你要做的是将数据表中的对象(可能是从查询返回)插入到List中。

 public List ShowMessage2(DataTable dtInput) { List objectList = new List(); foreach(DataRow dr in dtInput.Rows) { MyObj newObj = new MyObj(); newObj.ID = Convert.ToInt32(dr["ID"]); // Beware of the possible conversion errors due to type mismatches newObj.Name = dr["Name"].ToString(); objectList.Add(newObj); } return objectList; } public class MyObj { public int ID { get; set; } public string Name { get; set; } } 

刚看到你对这个问题的补充! 我不明白为什么你试图生成一个列表,如果你的意图只是在一个网格视图中显示数据,你可以在一行中做!

 List obj = new List(); DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Name"); dt.Rows.Add("1", "AAA"); dt.Rows.Add("2", "BBB"); dt.Rows.Add("3", "CCC"); dataGridView1.DataSource = dt; // THIS IS ALL U NEED! Just bind the DataTable to the grid as data source! 

在将DataRow添加到DataRow集合之前,需要创建DataRow。

例如,

 DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Name"); var dr = dt.NewRow(); dr[0] = "1"; dr[1] = "AAA"; dt.Rows.Add(dr); ... likewise foreach (DataRow dr in dt.Rows) { obj.Add(dr); } 

现在列表应该保持行。 如果有效,请告诉我。