ADO.NETを使用してIEnumerable <>を返すにはどうすればよいですか?

ado.net c# 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;
    }
}

受け入れられた回答

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;
                }
            }
        }
    }
}

明らかに、 IDataReaderまたはSqlDataReaderを受け入れるFavouritesコンストラクタを作成するか、値を取り込むためのユーティリティメソッドを作成するなど、これをリファクタリングすることができますが、これは基本的な構造です。


人気のある回答

usingブロック内ですべて作業することができれば、LINQとDbDataReader 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 ...
}


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow