2011-01-25 15 views
14

Bir DataRow'dan üretilen bir Dictionary<string,object>'a ihtiyacım var. Şu anda bu çalışma için bir şeyim var, ama çok fazla yol alıyorum ve .ToDictionary() uzantısı yöntemini kullanmıyorum.DataRow üzerinde 0ToBictionary() uzantı yöntemi nasıl kullanılır?

Birisi bunu nasıl başaracağınızı bana aydınlatabilir mi?

İşte benim başarısız girişimi:

var dataDictionary = dataTable.Select(acn + "=" + accountNumber).ToDictionary(key => key.Table.Columns); 

Bu KeyValuePair<DataColumnCollection, DataRow> döndürür, ancak yine önceden yine bir Dictionary<string,object>

Teşekkür gerekiyor! döndürülen sözlükte değerlere bir dönüşüm çalıştırmak istiyorsanız

.ToDictionary(row => (string)row["acn"]); 

ToDictionary ikinci temsilci alır:

+1

Sen anahtar ve değer olarak ne istediğini söylemeyi unutmuşum? Sorunuz bu olmadan gerçekten mantıklı değil. Genel terimleri kullanarak cevap göndereceğim. – driis

+0

Cevabınız için teşekkürler - bu işi yapabileceğimi düşünüyorum. anahtarımın sütun adı olması gerekiyor ve değerin, datarow'daki o sütunun değeri olması gerekiyor. – BueKoW

+0

Hmm - birden fazla satır seçiyor musunuz yoksa "Seç" iniz yalnızca bir taneyle eşleşmeli mi? – driis

cevap

8

Tabloda acn sütun olabilir İstediğiniz tuşu specifiy gerekir.

Düzenleme

genel durumuna da açıklık beri orijinal cevabı bırakacağım. Tek bir sıra almak istersiniz; daha sonra sütunları anahtarlar olarak ve sütun değerlerini, kuyu değerleri olarak kullanın. Bunu böyle yapıyorsun.

DataRow row = dataTable.Select(acn + "=" + accountNumber).Single(); // You might want SingleOrDefault 
var dataDictionary = row.Table.Columns.ToDictionary(col => col.Name, col => row[col.Name]); 

Feragat, yukarıdaki el altında bir derleyici olmadan yazılmış, biraz verdiği gerekebilir.

+0

Yukarıdaki kod tamamdır ama "derleyici olmadan yazılmıştır". Bunun yerine @ jjoelson cevabını kullandığınızdan emin olun. –

25

Bu eski olduğunu biliyorum ama birlikte gelenler için daha sonra doğru LINQ ifade driis kodunun hafif bir değişiklik geçerli:

var dictionary = row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row.Field<string>(col.ColumnName)); 
-1

Ben jjoelson cevabı @ LINQ

dataTable.Rows.Cast<DataRow>().Select(e=>e.Table.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => e[col.ColumnName])).ToList() 
2

gibi Dictionary<string, string> üretir. Eğer bir Dictionary<string, object> istiyorsanız, tabii ki, yapabileceği:

var dictionary = row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row.Field<object>(col.ColumnName)); 

Ama biraz daha az dolambaçlı bir versiyonudur:

var dictionary row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row[col]); 
İlgili konular