2011-10-19 22 views
8

का उपयोग करके मैं डैपर का उपयोग एक कॉलम में 2 कॉलम परिणाम प्राप्त करने के लिए कर रहा हूं। मैंने देखा है कि IntelliSense मुझे एक .ToDictionary() से पता चलता है जब मैं resultset पर ले जाएं, लेकिन मैं के बाद से व्यवसायिक गतिशील गुण का उपयोग करता है यह काम करने के लिए नहीं मिल सकता है/expandoObjectशब्दकोश को बदलने के लिए <गतिशील, गतिशील> शब्दकोश शब्दकोश <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; 
    } 
} 

धन्यवाद

उत्तर

14

प्रयास करें:

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