2008-10-15 9 views
40

को LINQ में एक रिकॉर्ड प्राप्त किये गये परिणामों के लिए सबसे अच्छा तरीका है:अगर मैं के रूप में कुंजी मैदान पर एक शर्त के साथ एक मेज क्वेरी एसक्यूएल

 var user = from u in dc.Users 
        where u.UserName == usn 
        select u; 

मुझे पता है कि मैं या तो मिल जाएगा शून्य परिणाम या एक परिणाम। क्या मुझे अभी भी आगे बढ़ना चाहिए और प्रत्येक के लिए परिणाम पुनर्प्राप्त करना चाहिए या इस तरह की स्थिति को संभालने का एक और पसंदीदा तरीका है।

+0

फर्स्टऑर्डडिल्ट या सिंगलऑर्डफॉल्ट पर टिप के लिए धन्यवाद। LINQ के लिए बहुत कुछ है कि मैंने अभी तक बहुत अधिक उपयोग नहीं किया है, और मैं कह सकता हूं कि वहां बहुत कुछ है। –

उत्तर

76

कुछ इस तरह का प्रयास करें:

var user = (from u in dc.Users 
        where u.UserName == usn 
        select u).FirstOrDefault(); 

FirstOrDefault विधि एक दृश्य है कि एक निर्दिष्ट शर्त या एक डिफ़ॉल्ट मान को संतुष्ट करता है, तो ऐसी कोई तत्व पाया जाता है के पहले तत्व देता है।

+1

यह linq से sql –

17

क्यों की तरह

var user = dc.Users.SingleOrDefault(u=> u.UserName==usn); 
+7

FirstOrDefault दक्षता के लिए शीर्ष 1 ऑपरेशन करेगा। दुर्भाग्यवश SingleOrDefault शीर्ष 2 नहीं करता है और पूरे सेट का चयन करता है। – DamienG

+0

सुनिश्चित नहीं है कि यह हमेशा पूरी तरह से सच है, शायद संस्करण या सटीक वाक्यविन्यास के आधार पर। जब मैं सिंगलऑर्डफॉल्ट का उपयोग करता हूं तो मुझे इस तरह के एसक्यूएल स्टेटमेंट देखना पड़ता है: "SELECT TOP (2) col1, col2 से चुनें (SELECT col1, col2) AS Extent1 कहां ..." तो यह दोनों शीर्ष 2 है और नहीं। ;-) – Culme

1

नहीं कुछ मैं SingleOrDefault विधि का प्रयोग करेंगे।

var user = (from u in dc.Users 
        where u.UserName == usn 
        select u).SingleOrDefault(); 
4

मैं प्रथम() या FirstOrDefault() का उपयोग करूंगा।

अंतर: पहले() पर कोई पंक्ति नहीं मिलने पर अपवाद फेंक दिया जाएगा।

5

यह भी ध्यान दिया जाना चाहिए कि पहले/फर्स्टऑर्डडिफॉल्ट/सिंगल/सिंगलऑर्डफॉल्ट LINQ से SQL कमांड के निष्पादन का बिंदु है। चूंकि LINQ कथन को उसके पहले निष्पादित नहीं किया गया है, इसलिए यह SQL उत्पन्न होने वाले प्रभाव को प्रभावित करने में सक्षम है (उदाहरण के लिए, यह एसक्यूएल कमांड में एक शीर्ष 1 जोड़ सकता है)

+0

के लिए काम नहीं करेगा बस मैं जिस जानकारी की तलाश में था। धन्यवाद – Sal

0

एक और विकल्प है (उपयोगकर्ता नाम) का उपयोग करना " == "

var user = (from u in dc.UserInfo 
         where u.Users.Contains(username) 
         select u).SingleOrDefault(); 

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

  • कोई संबंधित समस्या नहीं^_^