2011-10-19 33 views
8

Dapperを使用して、2列の結果セットを辞書にフェッチしています。 Dapperのは、動的なプロパティを使用しているため/ expandoObjectCollief.ToDictionary()を使用してDictionary <dynamic、dynamic>をDictionary <string、string>に変換する方法

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

答えて

14

てみてくださいありがとう、私は結果セットにカーソルを合わせると、私は)インテリセンスが.ToDictionary(私を示していることに気づいたが、私はそれを動作させることはできません。

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

動的オブジェクトを作成すると、そのオブジェクトとそれに対応するプロパティとメソッドはすべて動的型になります。動的ではないタイプに戻すためには、明示的なキャストを定義する必要があります。

+0

はい。それはそうです。ありがとう – Gullu

+0

+1は「動的」からキャストすることを覚えています。 –

+0

ダイナミックはいいですが、静的型にキャストする必要があるなど、多くのトラップがあります。 –

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

私はこれがそれほど単純ではないことを知っていました。エラー 'System.Collections.Generic.Dictionary '型を 'System.Collections.Generic.Dictionary 'に暗黙的に変換できません。 – Gullu

関連する問題