2009-10-03 12 views
16

मैं foreach का उपयोग किए बिना linq चुनिंदा कथन में पहली पंक्ति का चयन कैसे कर सकता हूं?LINQ पहले पंक्ति चुनें

मैं foreach का उपयोग करें और फिर तोड़ना; लेकिन यह एक बेहतर तरीका होना चाहिए?

मुझे पहली पंक्ति में मूल्य प्राप्त करना पसंद है; प्लस जांचें कि कोई पंक्ति नहीं मिली है। मेरी समस्या पूर्वानुमान के बिना मूल्य प्राप्त करना है।

मैं अपने डेटाटेबल में एक मूल्य खोजने के लिए क्या करता हूं और मुझे पता है कि पंक्ति uniqe है; तो मुझे एक चयन करना और मूल्य प्राप्त करना पसंद है; के साथ साथ एक जांच अगर वहाँ सुरक्षा के लिए कोई हिट है ... :)

इस कोड को मैं अब का उपयोग है, रूण

var var_QUERY_linq = 
    from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable() 
    where vm_TABLE_PK.Field<Int32>("MyField_Int32") == vmp_ROW_Counter_Int32 
    select vm_TABLE_PK; 

foreach (DataRow o_DataRow in var_QUERY_linq) 
{ 
     vmp_Return_string = o_DataRow.Field<string>("Myfield_nvarchar"); 

     break; 
} 

उत्तर

38

बस का उपयोग नीचे

धन्यवाद देखते हैं। FirstOrDefault()

var var_QUERY_linq = (
    from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable() 
    where vm_TABLE_PK.Field<Int32>("MyField_Int32") == vmp_ROW_Counter_Int32 
    select vm_TABLE_PK).FirstOrDefault(); 

if(var_QUERY_linq != null) 
{ 
    //There is a record 
} 
+0

मेरा मानना ​​है कि अशक्त जांच कभी भी कुछ भी ऊपर हो जाएगा जब तक कि आप FirstOrDefault उपयोग कर रहे हैं न । मेरा मानना ​​है कि आप क्या चाहते हैं। सबसे पहले() इसके बजाय। –

+10

। फर्स्ट() कुछ भी वापस नहीं होने पर अपवाद और अपवाद करता है, जबकि फर्स्टऑरडिफॉल्ट() वापस लौटाता है (हर स्थिति में मैंने देखा है। –

+3

@ डेविड हॉल सही है। सबसे पहले (अगर आप उम्मीद कर रहे हैं कि हमेशा एक होना चाहिए या अधिक रिकॉर्ड ताकि अगर ऐसा न हो तो आपको अपवाद मिलेगा। अगर आप किसी रिकॉर्ड की संभावना की उम्मीद कर रहे हैं, तो FirstOrDefault() का उपयोग करें और शून्य के लिए जांचें और उचित तरीके से संभाल लें। –

0

मुझे लगता है MyField क्षेत्र आप

का लाभ प्राप्त करना चाहते है

आप नल के अलावा डिफ़ॉल्ट परिणाम भी सेट कर सकते हैं। पसंद:

var result = vm_Table_Pk.DefaultIfEmpty("Missing").First().MyField; 

और चिंता न करें Intellisense इस तरह आपकी मदद करेगा।

+0

नाइस! मैं बिना किसी पूर्वानुमान के अपना मूल्य कैसे प्राप्त करूं: vmp_Return_string = o_DataRow.Field ("Myfield_nvarchar"); –

+0

@ आरबीसी, मैंने आपके प्रश्न के अनुसार कोड बदल दिया। – Tarik

3

जब मैं सूची से पहला आइटम ढूंढने के लिए फर्स्टऑर्डडिफॉल्ट का उपयोग करता हूं तो आइटम (ऑर्डरबी) के आदेश के साथ मैंने एक समस्या का बहिष्कार किया।

मैं तुम्हें लेने उपयोग करने के लिए पहला आइटम प्राप्त करने के लिए सुझाव है:

var_QUERY_linq.Take(1).FirstOrDefault() 

* हमेशा एसक्यूएल प्रोफाइलर का उपयोग यदि संभव हो तो क्वेरी एसक्यूएल सर्वर के लिए भेजा जाता है कि जाँच करने के लिए।

+0

नाइस! धन्यवाद! –

+0

अच्छा जवाब !!! वेल्डोन कैसे लून – Amit

4

प्रथम() ले जाएगा केवल नाम या एकल() पहले लेने के लिए और अगर वहाँ अपवाद बढ़ा देंगे अधिक

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