2011-01-25 12 views
14

पर मुझे डेटारो से उत्पादित Dictionary<string,object> की आवश्यकता है। मेरे पास वर्तमान में इस काम के लिए कुछ है, लेकिन मैं बहुत अधिक रास्ता कर रहा हूं और इसका उपयोग नहीं कर रहा हूं। टोपी() एक्सटेंशन विधि।डेटा का उपयोग करने के लिए .toDictionary() एक्सटेंशन विधि DataRow

क्या कोई मुझे सफलतापूर्वक इसे पूरा करने के तरीके पर प्रकाश डाल सकता है?

यहाँ मेरी असफल प्रयास है:

var dataDictionary = dataTable.Select(acn + "=" + accountNumber).ToDictionary(key => key.Table.Columns); 

यह एक KeyValuePair<DataColumnCollection, DataRow> दिखाए, लेकिन फिर से, मैं पहले से फिर से एक Dictionary<string,object>

धन्यवाद की जरूरत है!

.ToDictionary(row => (string)row["acn"]); 

ToDictionary एक दूसरे प्रतिनिधि लेता है अगर तुम लौटे शब्दकोश में मूल्यों पर एक परिवर्तन चलाना चाहते हैं:

+1

आप क्या आप कुंजी और मान के रूप में चाहते हैं उल्लेख करना भूल गया? आपका प्रश्न वास्तव में इसके बिना समझ में नहीं आता है। मैं सामान्य शब्दों का उपयोग कर एक उत्तर पोस्ट करूंगा। – driis

+0

आपके उत्तर के लिए धन्यवाद - मुझे लगता है कि मैं यह काम कर सकता हूं। मेरी कुंजी कॉलम नाम होने की आवश्यकता है और मेरे मान को डैटरो में उस कॉलम के लिए मान होना आवश्यक है। – BueKoW

+0

हम्म - क्या आप कई पंक्तियों का चयन कर रहे हैं या क्या आपका 'चयन' केवल एक ही मैच से मेल खाना चाहिए? – driis

उत्तर

8

आप कुंजी आप चाहते हैं, जो तालिका में acn स्तंभ हो सकता है specifiy की जरूरत है।

संपादित

के बाद से यह सामान्य स्थिति बताते हैं मैं मूल जवाब छोड़ देंगे। आप एक पंक्ति लेना चाहते हैं; फिर इसके कॉलम का उपयोग कुंजी और कॉलम मानों के रूप में, अच्छी तरह से मानों के रूप में करें। इस तरह आप ऐसा करते हैं।

DataRow row = dataTable.Select(acn + "=" + accountNumber).Single(); // You might want SingleOrDefault 
var dataDictionary = row.Table.Columns.ToDictionary(col => col.Name, col => row[col.Name]); 

अस्वीकरण, ऊपर हाथ में एक संकलक बिना लिखा गया था, थोड़ा फेरबदल की आवश्यकता हो सकती।

+0

उपरोक्त कोड ठीक है लेकिन "संकलक के बिना लिखा गया था"। इसके बजाय @ jjoelson का जवाब उपयोग करना सुनिश्चित करें। –

25

मैं जानता हूँ कि यह पुराना है, लेकिन उन है कि साथ आ के लिए बाद में सही LINQ अभिव्यक्ति driis के कोड के एक मामूली संशोधन है:

var dictionary = row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row.Field<string>(col.ColumnName)); 
-1

मैं LINQ

dataTable.Rows.Cast<DataRow>().Select(e=>e.Table.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => e[col.ColumnName])).ToList() 
2

चाहते @ jjoelson के जवाब Dictionary<string, string> का उत्पादन करता है। यदि आप एक Dictionary<string, object> चाहते हैं, आप, ज़ाहिर है, कर सकता है:

var dictionary = row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row.Field<object>(col.ColumnName)); 

लेकिन एक थोड़ा कम जटिल संस्करण है:

var dictionary row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row[col]); 
संबंधित मुद्दे