如何返回IEnumerable<>使用ADO.NET?

时间:2012-07-24 15:31:57

标签: c# ado.net dapper

我一直在使用Dapper和我目前的项目,我将不得不使用ADO.NET。我的问题是如何使用ADO.NET返回IEnumerable?这是我使用Dapper的原因。有人可以帮我转换这个但是用ADO做同样的事吗?

public IEnumerable<Favorites> GetFavorites()
{
    using (SqlConnection sqlConnection = new SqlConnection(connString))
    {
        sqlConnection.Open();
        var work = sqlConnection.Query<Favorites>("Select * from favorites");
        return work;
    }
}

2 个答案:

答案 0 :(得分:19)

你可以这样使用yield return

public IEnumerable<Favorites> GetFavorites()
{
    using (SqlConnection sqlConnection = new SqlConnection(connString))
    {
        sqlConnection.Open();
        using (SqlCommand cmd = sqlConnection.CreateCommand())
        {
            cmd.CommandText = "Select * from favorites";
            cmd.CommandType = CommandType.Text;
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    // Create a Favorites instance
                    var favorites = new Favorites();
                    favorites.Foo = reader["foo"];
                    // ... etc ...
                    yield return favorites;
                }
            }
        }
    }
}

显然,你可以通过创建一个接受IDataReaderSqlDataReader的收藏夹构造函数来重构它,或创建一个实用程序方法来填充值,或者其他什么,但这是基本结构。< / p>

答案 1 :(得分:0)

如果您可以在using块内完成所有操作,则可以利用LINQ和IEnumerable上的DbDataReader界面。它提供了自包含的纯ADO.NET,并且代码量相当少。

var command = connection.CreateCommand();
command.CommandText = "select * from favorites";
using (var reader = command.ExecuteReader()) {
    var work = from IDataRecord r in select ...;
    ... use work ...
}