我可以使用DataAdapter C#填充列表吗?

yon*_*236 4 c# ado.net

假设我有这个代码(伪代码)

class SomeClass
{
   class Person
   {
      public static string Name { get; set; }
      public static int Age { get; set; }
   }

   List<Person> person = new List<person>;

   public void SelectPerson()
   {
      DataTable dt = new DataTable();

      SqlConnection conn = GetConnection();
      conn.Open();

      SqlDataAdapter da = new SqlDataAdapter("SELECT name, age FROM person", conn);
      da.Fill(dt);
   }
}
Run Code Online (Sandbox Code Playgroud)

我可以根据DataAdapter的结果填写列表(人)吗?我该怎么办?或者有任何解决方法吗?谢谢...

Rob*_*ner 9

可能最好的方法是不要先读入数据表:

var dr = new DataReader(....) // Fill in what is needed, can't remember offhand
while(dr.Next())
{
    persons.Add(
        new Person() {
            Name = (string) r["Name"], 
            Age = (int) r["Age"] 
        }
    );
}
Run Code Online (Sandbox Code Playgroud)

警告:您希望快速关闭DataReader /连接,不要进行大量处理.上面的代码比使用DataTable作为中介更有效.

但如果您确实想先使用数据表,可以使用LINQ:

var list = dt.AsEnumerable().Select(r => new Person() { 
    Name = (string) r["Name"], 
    Age = (int) r["Age"] }
).ToList()
Run Code Online (Sandbox Code Playgroud)

或只是ittrate of dt.Rows并创建一个新人并将其添加到列表中

您还应该在连接和阅读器周围使用Using()语句.