2009-07-01 20 views
7

मैं एक शब्दकोश से कुछ डेटा पुनर्प्राप्त करने के लिए LINQ का उपयोग करने का प्रयास कर रहा हूं।शब्दकोश के साथ लैम्ब्डा का उपयोग

var testDict = new Dictionary<int, string>(); 
    testDict.Add(1, "Apple"); 
    testDict.Add(2, "Cherry"); 

    var q1 = from obj in testDict.Values.Where(p => p == "Apple"); 
    var q2 = from obj in testDict.Where(p => p.Value == "Apple"); 

उपर्युक्त पंक्तियां, q1 और q2, दोनों एक संकलक त्रुटि में परिणामस्वरूप होते हैं।

error CS0742: A query body must end with a select clause or a group clause 

मैं शब्दकोश में मूल्यों को खोजने के लिए LINQ का उपयोग करने के बारे में कैसे जा सकता हूं?

आप अपने बयान है कि जरूरत नहीं है में धन्यवाद,

रिक

उत्तर

24

या तो

var q1 = from obj in testDict.Values where obj == "Apple" select obj; 

या

var q1 = testDict.Where(p => p.Value == "Apple"); 
+1

बस स्पष्ट करने के लिए, कारण यह काम करता है कि एक IEnumerable > के रूप में कार्य करता है शब्दकोश –

+1

दूसरा अभिव्यक्ति भी p.Value होना चाहिए == "एप्पल" के रूप में पी एक जोड़ी हो जाएगा <,>। – Richard

+5

वे आपको एक अभिव्यक्ति प्राप्त करेंगे जो एक आईनेमरेबल परिणाम देता है। यदि आप वास्तव में वास्तविक वस्तु चाहते हैं, तो आपको सिंगल() या फर्स्ट() –

8

आप एक अतिरिक्त है "obj से में"। या तो इसे हटा दें या बदलें। विधि वाक्यविन्यास के बजाय linq क्वेरी वाक्यविन्यास के लिए।

var q1 = from obj in testDict.Values 
     where obj.Value == "Apple" 
     select obj;  
var q2 = testDict 
     .Where(p => p.Value == "Apple"); 
+0

पहली अभिव्यक्ति में पी। वैल्यू == "ऐप्पल" होना चाहिए क्योंकि पी एक जोड़ा <,> होगा। – Richard

+3

सच नहीं है, वह testDict.Values ​​से चयन कर रहा है, जो एक IENumerable है। वह केवल KeyValuePairs प्राप्त करेगा अगर वह testDict से ही चुना गया है। –

संबंधित मुद्दे