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

IDataReader明らかに、またはを受け入れるFavoritesコンストラクターをSqlDataReader作成するか、値を設定するユーティリティメソッドを作成するなどして、これをリファクタリングできますが、これが基本構造です。

于 2012-07-24T15:38:29.437 に答える
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 ...
}
于 2015-10-20T14:00:59.500 に答える