2011-10-19 37 views
8

Estoy usando Dapper para buscar un conjunto de resultados de 2 columnas en un diccionario. Noté que intelisense me muestra una .ToDictionary() cuando se ciernen sobre el conjunto de resultados, pero no puedo conseguir que funcione desde pulcro utiliza las propiedades dinámicas/expandoObjectcómo convertir Diccionario <dinámico, dinámico> a Diccionario <cadena, cadena> usando 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; 
    } 
} 

gracias

Respuesta

14

Probar:

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

Una vez que tiene un objeto dinámico, todo lo que hace con él y las propiedades y métodos correspondientes son del tipo dinámico. Necesita definir un molde explícito para volverlo a un tipo que no sea dinámico.

+0

yes. eso lo hace. gracias – Gullu

+0

+1 por recordar expulsar de 'dynamic'. –

+0

La dinámica es agradable, pero tiene muchas trampas como la necesidad de devolver a tipos estáticos. –

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

Sabía que esto no era tan simple. Error No se puede convertir implícitamente el tipo 'System.Collections.Generic.Dictionary ' a 'System.Collections.Generic.Dictionary ' – Gullu

Cuestiones relacionadas