15

我一直在使用 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;
    }
}
4

2 回答 2

20

你可以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;
                }
            }
        }
    }
}

显然,您可以通过创建一个接受IDataReaderor的收藏夹构造函数来重构它SqlDataReader,或者创建一个实用方法来填充值,或其他任何东西,但这是基本结构。

于 2012-07-24T15:38:29.437 回答
0

如果您可以在using块内完成所有工作,则可以利用 LINQIEnumerableDbDataReader. 它提供了具有相当少量代码的独立纯 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 ...
}
于 2015-10-20T14:00:59.500 回答