2011-11-21 3 views
13

वापस करने के लिए लिंक मुझे यकीन नहीं है कि निम्नलिखित स्ट्रिंग के रूप में Vend के लिए मान क्यों नहीं लौटाता है। जब मैं बिकवाना के मूल्य के लिए जाँच यह कहते हैं: System.Data.Objects.ObjectQuery``1[System.String]स्ट्रिंग

 string vend = (from vnd in db.Vendors 
      where vnd.VendorID == id 
      select vnd.VendorName).ToString(); 

जब मैं बिकवाना का मूल्य देखते हैं, तो यह मेरी अपेक्षा

+0

क्या आप वेंड के प्रकार को देख रहे हैं? – zmbq

उत्तर

29

आप एक IQueryable<String> वापस हो रही है आप से क्वेरी नहीं है। यदि VendorName एक स्ट्रिंग है

string vend = (from vnd in db.Vendors 
     where vnd.VendorID == id 
     select vnd.VendorName).First().ToString(); 

ToString की जरूरत नहीं है: आप या तो पहले या एकल या कुछ और की जरूरत है।

string vend = db.Vendors.Single(vnd => vnd.VendorID == id); // more terse 

First सेट से पहले रिकॉर्ड हड़पने जाएगा और यदि सेट खाली है एक अपवाद फेंक देते हैं।

FirstOrDefault अपेक्षित प्रकार के लिए पहला रिकॉर्ड या डिफ़ॉल्ट लौटाएगा, कोई अपवाद नहीं।

Single सेट का पहला रिकॉर्ड लौटाएगा, लेकिन अगर सेट में एक से अधिक रिकॉर्ड हैं या सेट खाली है तो अपवाद फेंक देगा।

SingleOrDefault सेट के पहले रिकॉर्ड को वापस या डिफ़ॉल्ट के प्रकार के डिफ़ॉल्ट के रूप में वापस कर देगा, लेकिन सेट में एक से अधिक रिकॉर्ड होने पर अपवाद फेंक देगा।

+0

मैं हमेशा इसे भूल जाता हूं। संक्षेप में स्पष्टीकरण के लिए धन्यवाद! – sparkyShorts

5

आप क्वेरी पर ToString() को कॉल कर रहे हैं, न कि आपकी क्वेरी के परिणाम पर। प्रयास करें

string vend = (from vnd in db.Vendors 
where vnd.VendorID == id 
select vnd.VendorName).First(); 

इस क्वेरी, जो पहले से ही एक स्ट्रिंग होना चाहिए के पहले परिणाम हो जाता है (यह मानते हुए VendorName एक स्ट्रिंग है)। इस प्रकार, ToString() को कॉल करने की कोई आवश्यकता नहीं है।

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