Comment puis-je retourner un IEnumerable <> en utilisant ADO.NET?

ado.net c# dapper

Question

J'ai utilisé Dapper et avec mon projet actuel, je vais devoir utiliser ADO.NET. Ma question est la suivante: comment puis-je retourner un IEnumerable en utilisant ADO.NET? Voici ce que j'ai avec Dapper. Est-ce que quelqu'un peut m'aider à convertir ceci pour faire la même chose mais avec ADO?

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

Réponse acceptée

Vous pouvez utiliser le yield return comme ceci:

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

Évidemment, vous pouvez modifier cela en créant un constructeur Favoris qui accepte un IDataReader ou un SqlDataReader , ou en créant une méthode d'utilitaire pour remplir les valeurs, ou autre, mais il s'agit de la structure de base.


Réponse populaire

Si vous pouvez faire tout cela dans le bloc using , vous pouvez tirer parti de LINQ et de l'interface IEnumerable sur DbDataReader . Il fournit un ADO.NET pur et autonome avec une quantité de code raisonnablement faible.

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi