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