2011-10-19 22 views
8

nasıl kullanılır? 2 bir sütun sonuçlarını bir sözlük içine almak için Dapper kullanıyorum. Ben Resultset üzerinde gezdirin ama şık, dinamik özelliklerini kullanır çünkü o iş için alınamıyor zaman intellisense bana bir .ToDictionary() gösterdiğini fark /expandoObjectDictionary <dynamic, dynamic> to Dictionary <string, string> Colllection.ToDictionary()

Dictionary<string, string > rowsFromTableDict = new Dictionary<string, string>(); 
using (var connection = new SqlConnection(ConnectionString)) 
{ 
    connection.Open(); 
    var results = connection.Query 
        ("SELECT col1 AS StudentID, col2 AS Studentname 
        FROM Student order by StudentID"); 
    if (results != null) 
    { 
    //how to eliminate below foreach using results.ToDictionary() 
    //Note that this is results<dynamic, dynamic> 
     foreach (var row in results) 
     { 
       rowsFromTableDict.Add(row.StudentID, row.StudentName); 
     } 
     return rowsFromTableDict; 
    } 
} 

size

cevap

14

deneyin teşekkür: bir dinamik nesne sahip olduktan

results.ToDictionary(row => (string)row.StudentID, row => (string)row.StudentName); 

, bunu ve ilgili özellikleri ve yöntemleri ile yapmak her şey dinamik tiptedir. Dinamik olmayan bir türe geri almak için açık bir döküm tanımlamanız gerekir.

+0

türüne dolaylı olarak dönüştüremiyorum. Bu yapar. 'dynamic' dışına çıkmayı hatırladığınız için – Gullu

+0

+1 teşekkürler. –

+0

Dinamik güzel, ama statik tiplere geri dönme ihtiyacı gibi bir çok tuzak var. –

-1
if (results != null) 
{ 
    return results.ToDictionary(x => x.StudentID, x => x.StudentName);  
} 
+0

Bunun bu kadar basit olmadığını biliyordum. Hata 'System.Collections.Generic.Dictionary ' türünü 'System.Collections.Generic.Dictionary ' ' – Gullu

İlgili konular