C# 将数据表的内容提取到列表C中

C# 将数据表的内容提取到列表C中,c#,datatable,C#,Datatable,我正在尝试将datatable内容放入列表中。我正在使用以下代码,但它不能正常工作 public List<object> ShowMessage() { List<object> obj = new List<object>(); DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Name");

我正在尝试将datatable内容放入列表中。我正在使用以下代码,但它不能正常工作

public List<object> ShowMessage()
    {
        List<object> obj = new List<object>();

        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;
    }
我是新来的,不确定我做的是否正确,或者我需要使用其他东西。如有任何建议,将不胜感激


谢谢

借助以下帮助将数据表转换为名称字符串列表:

这和

List<string> names = new List<string>();

foreach(DataRow r in dt.Rows)    
    names.Add((string)r["Name"]);

我认为你的例子太抽象了。这一个使用一个名为Person的可能类

public class Person
{
   public int PersonID;
   public string Name;
   // other fields will follow in future
}

public List<Person> GetPersonList()
{
   List<Person> people = new List<Person>();

   // This is just as example, because in real code 
   // you get this table from a database
   DataTable dt = new DataTable();
   dt.Columns.Add("ID");
   dt.Columns.Add("Name");

   dt.Rows.Add(1,"John");
   dt.Rows.Add(2, "Mark");
   dt.Rows.Add(3, "Steve");

   // Loop over the rows and construct a Person instance for every row
   // Add that row to the List<Person> to return 
   foreach (DataRow dr in dt.Rows)
   {
       Person p = new Person() {PersonID =Convert.ToInt32(dr[0]), Name = dr[1].ToString());
       people.Add(p);
   }
   return people;
}

顺便说一下,这种代码模式正是一个好的ORM为您所做的。对实体框架或Dapper进行一些研究将非常有用

@Karni:您已经接近您所需要的了。然而,下面是代码示例的修改版本,以便实现所需的功能

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

public class ListObj : List<Obj>
{

}


class Program
{
    static void Main(string[] args)
    {


        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");

        ListObj objListObj = new ListObj();

        //to fill the list / collection
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            objListObj.Add(new Obj() { ID = Convert.ToInt16(dt.Rows[i][0]), Name = dt.Rows[i][1].ToString() });
        }


        //To verify if the collection is filled.
        foreach (var item in objListObj)
        {
            Console.WriteLine(item.ID + " : " + item.Name);
        }

        Console.Read();
    }
}

您希望在该列表中包含哪些内容?它应该是字符串列表AAA、BBB、CCC还是其他什么?@SergeyBerezovskiy是的,我期待一个带有AAA、BBB和CCC的字符串列表。旁注-ShowMessage不是方法的最佳名称,它返回一些数据的列表,并且不显示任何内容
public class Obj
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class ListObj : List<Obj>
{

}


class Program
{
    static void Main(string[] args)
    {


        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");

        ListObj objListObj = new ListObj();

        //to fill the list / collection
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            objListObj.Add(new Obj() { ID = Convert.ToInt16(dt.Rows[i][0]), Name = dt.Rows[i][1].ToString() });
        }


        //To verify if the collection is filled.
        foreach (var item in objListObj)
        {
            Console.WriteLine(item.ID + " : " + item.Name);
        }

        Console.Read();
    }
}