2011-05-29 18 views
23

Dapper FastExpando nesnesini çekiyorum ve tasarım/derleme zamanından ziyade sütun adlarını dinamik olarak çalışma zamanında referans gösterebilmeyi istiyorum.Dapper FastExpando'daki sütunlara string veya index yoluyla erişmenin bir yolu var mı?

var testdata = conn.Query("select * from Ride Where RiderNum = 21457"); 

aşağıdaki yapabilmek istiyorum: Ben şu işlemleri olmak istiyorum

foreach(var row in testdata) { 
    var Value = row["PropertyA"]; 
} 

ben yapabilir anlamak:

var Value = row.PropertyA; 

ama İhtiyacım olan mülkün adı çalışma zamanına kadar bilinmeyeceğinden bunu yapamam.

this SO Question yanıtı çalışmıyor. Hala aynı Target Invocation istisnasını alıyorum. Yani ...

Dapper FastExpando ile yapmak istediklerimi yapmak için herhangi bir yolu var mı?

+0

: - Eğer böyle Sam Saffron'ın cevabın bir varyasyon kullanabilirsiniz yüzden bazen değiştirildi döndü ediliyor sütun adları beri dizine göre sonuçları erişmek için gerekli Bu soruyu cevaplayacak bir cevap vardı. http://stackoverflow.com/questions/4939508/get-value-of-c-dynamic-property-via-string/5738983#5738983 – jbtule

cevap

32

Tabii, aslında bundan yolu kolaydır: "veya dizin" başlığı kısmına ilişkin

var sql = "select 1 A, 'two' B"; 
var row = (IDictionary<string, object>)connection.Query(sql).First(); 
row["A"].IsEqualTo(1); 
row["B"].IsEqualTo("two"); 
+0

Kendimi her zaman 'FirstOrDefault()' kullanarak buluyorum ve hala satırın olup olmadığını kontrol etmek zorundayım. satır dizinine erişmeye çalışmadan önce null. Bir sütun değeri veya belirli bir satırı denemek ve almak veya varolmayan bir varsayılan değer döndürmek için bir yolu var mı? – crush

1

Seçilen cevap "bu SO Soru" için işe yaramaz iken

var sql = "select 1, 'two'"; 
var row = (IDictionary<string, object>)connection.Query(sql).First(); 
row.Values.ElementAt(0).IsEqualTo(1); 
row.Values.ElementAt(1).IsEqualTo("two"); 
İlgili konular