Как преобразовать словарь <динамический, динамический> в словарь <строка, строка>, используя Colllection.ToDictionary () - PullRequest
8 голосов
/ 19 октября 2011

Я использую Dapper для извлечения результатов из 2 столбцов в словарь. Я заметил, что intellisense показывает мне .ToDictionary () при наведении курсора на набор результатов, но я не могу заставить его работать, так как dapper использует динамические свойства / expandoObject

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

спасибо

Ответы [ 2 ]

14 голосов
/ 19 октября 2011

Попробуйте:

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

Если у вас есть динамический объект, все, что вы делаете с ним, и соответствующие свойства и методы имеют динамический тип. Вам нужно определить явное приведение, чтобы вернуть его в тип, который не является динамическим.

0 голосов
/ 19 октября 2011
if (results != null)
{
    return results.ToDictionary(x => x.StudentID, x => x.StudentName);     
}
...