सबसे पहले, यह एक वैध क्वेरी नहीं है। जब आप क्वेरी सिंटैक्स (from blah in blah ...
) का उपयोग करते हैं, तो आपके पास select
क्लॉज होना चाहिए। इसे और अधिक की तरह होना चाहिए:
var manager =
(from n in DataContext.Manager
where n.Name == "Jones"
select n).FirstOrDefault();
आपके प्रश्न का उत्तर करने के लिए, आपकी क्वेरी पर FirstOrDefault()
बुला क्वेरी या प्रकार के लिए डिफ़ॉल्ट मान (सबसे अधिक संभावना null
इस मामले में) के पहले परिणाम वापस आ जाएगी। आप जो भी जा रहे हैं, उसके लिए यह पर्याप्त उपयोग नहीं होगा क्योंकि क्वेरी में एक से अधिक परिणाम हो सकते हैं।
यदि आप यह सत्यापित करना चाहते हैं कि क्वेरी केवल एक परिणाम देता है, तो आपको इसके बजाय SingleOrDefault()
विधि का उपयोग करना चाहिए। यह क्वेरी द्वारा उत्पादित एक आइटम को वापस कर देगा, डिफ़ॉल्ट मान null
यदि यह खाली था या एक से अधिक आइटम होने पर अपवाद फेंक देगा।
यदि आप कोई अपवाद नहीं फेंकना चाहते हैं, तो पहले दो परिणामों को एक सूची में फेंकना और यह सत्यापित करना आसान हो सकता है कि आपके पास केवल एक है।
var managers =
(from m in DataContext.Manager
where m.Name == "Jones"
select m).Take(2).ToList();
if (managers.Count == 1)
{
// success!
var manager = managers.First();
// do something with manager
}
else
{
// error
}
स्रोत
2012-01-16 22:08:24
फर्स्टऑर्डडिल्ट विधि के लिए दस्तावेज़ देखें। यदि कोई परिणाम नहीं है तो यह डेटा प्रकार के लिए डिफ़ॉल्ट देता है। यदि यह जरूरी है कि * 1 से अधिक * रिकॉर्ड क्वेरी मानदंड पास नहीं करता है, तो इसके बजाय सिंगलऑर्डडिल्ट का उपयोग करें। –