7

这就是我目前从数据库中选择数据的方式:

public DataTable GetData()
{
    DataTable table = new DataTable("Table");
    using (SqlConnection connection = new SqlConnection("Connection string"))
    {
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandType = System.Data.CommandType.Text;
        command.CommandText = "query string";

        connection.Open();
        SqlDataAdapter adapter = new SqlDataAdapter(command);
        adapter.Fill(table);
    }
    return table;
}

但它返回 DataTable,我想选择 List 而不是 DataTable。像这样:

public List<MyClass> GetData()
{
    DataTable table = new DataTable("Table");
    using (SqlConnection connection = new SqlConnection("Connection string"))
    {
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandType = System.Data.CommandType.Text;
        command.CommandText = "query string";

        connection.Open();
        SqlDataAdapter adapter = new SqlDataAdapter(command);
        adapter.Fill(table);
    }
    ...
    return [List of MyClass];
}

我怎样才能做到这一点?

谢谢!

4

4 回答 4

6

如果要使用DataRowCollection填充自定义对象列表,可以使用 LINQ 和对象初始化程序:

var lst = table.AsEnumerable().Select(r =>
    new MyObject
    {
        FirstProperty = r.Field<int>("FirstProperty"),
        OtherProperty = r.Field<string>("OtherProperty")
    }).ToList(); 
于 2012-05-08T20:25:47.200 回答
4

如果您不想深入研究 LINQ to SQL 或实体框架,我建议您使用dapper-dot-net 。在大多数情况下,为了实现你的结果而摸索自己IDataReader是不值得的。

于 2012-05-08T20:14:23.707 回答
3

试试这个代码。

public List<MyClass> GetData()
{
    DataTable table = new DataTable("Table");
    using (SqlConnection connection = new SqlConnection("Connection string"))
    {
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandType = System.Data.CommandType.Text;
        command.CommandText = "query string";
        connection.Open();
        SqlDataAdapter adapter = new SqlDataAdapter(command);
        adapter.Fill(table);
        List<MyClass> list=new List<MyClass>();
        foreach(DataRow row in table)
        {
            MyClass instance = new MyClass();
            instance.ID = row["ID"];
            //similarly for rest of the properties

            list.Add(instance);
        }

    }

    return list;
}
于 2012-05-08T20:14:31.320 回答
1

如果您使用的是 ADO.NET 方法 - 您将获得一个数据表,您可以将其转换为 List 或 IEnumberable。

或者,您可以查看诸如 nHibernate 之类的 ORM 工具或使用 LINQ to SQL

于 2012-05-08T20:13:11.557 回答