2012-07-24 19 views
15

Dapper'ı kullanıyorum ve şu anki projemle birlikte ADO.NET kullanmak zorunda kalacağım. Sorum şu: ADO.NET kullanarak IEnumerable'ı nasıl iade edebilirim? İşte Dapper'ı kullanıyorum. Birisi bunu aynısını yapmak için ADO'yu kullanmamda yardımcı olabilir mi?ADO.NET kullanarak IEnumerable'ı nasıl iade edebilirim?

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

Varlıklarınız için DataSets ve DataRows ile çalışmaktan memnun musunuz (ör. Sık Kullanılanlar) veya güçlü yazılan sınıflara ihtiyacınız var mı? – davenewza

+0

Standart ADO.NET işlevselliği, veri sonuçlarını sizin için bir nesneye eşleştirmeyecektir. Temelde bir "DataSet" i sorgudan geri alırsınız ve 'Favorites' nesnelerini bundan yapmak zorunda kalırsınız. – David

+3

Sadece 'DataSet' satırları, her bir – paul

cevap

19

Öyle gibi yield return kullanabilirsiniz:

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

Açıkçası, değerleri doldurmak için bir IDataReader veya SqlDataReader veya bir yardımcı yöntem oluşturma kabul eden bir Sık yapıcı oluşturarak bu planı ayrı, veya her neyse, ama bu temel yapıdır.

0

using bloğu içinde çalışabilirseniz, LINQ veüzerindeki IEnumerable arabiriminden yararlanabilirsiniz. Makul derecede küçük bir kod ile kendi kendine yeten bir ADO.NET sağlar.

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