我一直在使用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
的Favorites構造函數來重構它,或創建一個實用程序方法來填充值,或者其他什麼,但這是基本結構。
如果你能做到,你所有的工作範圍內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 ...
}