2009-12-10 25 views
24

में मूल्य का चयन करें 10 में किसी विशेष पंक्ति के किसी विशेष कॉलम में मान का चयन करने के लिए आप LINQ (C#) का उपयोग कैसे करते हैं। बराबर SQL होगा:लिंक: एक डेटाटेबल कॉलम

select NAME from TABLE where ID = 0 

अग्रिम धन्यवाद।

उत्तर

16
var name = from r in MyTable 
      where r.ID == 0 
      select r.Name; 

पंक्ति अद्वितीय है, तो आप भी सिर्फ कर सकता है:

var row = DataContext.MyTable.SingleOrDefault(r => r.ID == 0); 
var name = row != null ? row.Name : String.Empty; 
+0

टिप्पण लायक है कि एक SingleOrDefault कॉल बुला वास्तव में सभी स्तंभों एक बार SQL में शाब्दिक अनुवाद का चयन करेंगे (यह एक IQueryable की तुलना में एक MyTable ऑब्जेक्ट के रूप में नहीं बल्कि)। तालिका में और क्या है, इस पर निर्भर करता है कि प्रदर्शन प्रभाव हो सकता है जो चुनिंदा विधि नहीं होगी। एक ठेठ तालिका पर पठनीयता छोटे प्रदर्शन अंतर के लिए तर्कसंगत है लेकिन चूंकि सवाल समकक्ष एसक्यूएल के बारे में था, मैंने सोचा कि यह स्पष्ट करने योग्य था। – fyjham

+0

सिंगलऑर्डडिल्ट का सबसे उचित रूप से उपयोग किया जाता है जब आप किसी सेट से एक अनन्य आइटम पुनर्प्राप्त करना चाहते हैं। जो इसकी आवाज से ओपी है। – James

+0

यह सिंगलऑर्डफॉल्ट के रूप में काम करता है। धन्यवाद – ianbeks

0
var x = from row in table 
      where row.ID == 0 
      select row 

जाना चाहिए तुम्हें एक DataTable कि पंक्तियों के बारे में जानता है, बुद्धिमान अन्य आप पंक्ति का उपयोग करना होगा है सूचकांक:

where row[rowNumber] == 0 

इस उदाहरण में आप पंक्ति डेटा को अज्ञात वर्ग या प्रीपेरेड क्लैस में रखने के लिए चयन का भी उपयोग करना चाहते हैं रों

7

मैं दूसरों गैर लैम्ब्डा वाक्यविन्यास दे दिया है तो बस यह पूरा मैं लैम्ब्डा वाक्यविन्यास बराबर में डाल देता हूँ के लिए नोटिस (यदि आप किसी अन्य विधि के लिए इसे पारित करना चाहते हैं):

गैर लैम्ब्डा (के रूप में जेम्स की पोस्ट के अनुसार):

var name = from i in DataContext.MyTable 
      where i.ID == 0 
      select i.Name 

समतुल्य लैम्ब्डा वाक्य रचना:

var name = DataContext.MyTable.Where(i => i.ID == 0) 
           .Select(i => new { Name = i.Name }); 

वहाँ वास्तव में बहुत व्यावहारिक अंतर, बस व्यक्तिगत राय है जिस पर आप पसंद करते हैं नहीं है।

+0

मुझे लगता है कि आपका लैम्ब्डा उत्तर चिह्नित एक से सही है। SingleOrDefault() पंक्ति के सभी कॉलम लाएगा (यह ओपी अनुरोध नहीं है, ओपी केवल एक कॉलम के लिए अनुरोध किया गया है)। कहां() और चयन() संयोजन केवल सभी कॉलम लाने से आवश्यक कॉलम लाएगा। अगर मैं गलत हूं तो कृपया मुझे सही करें। – gsk

+0

हाँ, आप सही हैं। आप अभी भी अंत में ".SingleOrDefault()" कर सकते हैं (उदाहरण: 'स्ट्रिंग नाम = DataContext.MyTable.Where (i => i.ID == 0)। चयन करें (i => i.Name) .SingleOrDefault(); 'केवल 1 कॉलम से पूछताछ करेगा)। सिंगलऑर्डफॉल्ट के बारे में स्वाभाविक रूप से "fetch-all" कुछ भी नहीं है, आपको इसके लिए केवल प्रश्नों को चेन करने की आवश्यकता है। ऐसा कहकर, प्रदर्शन ओवरहेड आमतौर पर नगण्य है जब तक कि आपके पास अन्य कॉलम में कुछ बहुत बड़ा डेटा न हो। – fyjham

23

आपके उत्तरों के लिए धन्यवाद। मुझे समझ में नहीं आया कि किस प्रकार का ऑब्जेक्ट "मायटेबल" था (आपके उत्तरों में) और निम्नलिखित कोड ने मुझे नीचे दी गई त्रुटि दी।

DataTable dt = ds.Tables[0]; 
var name = from r in dt 
      where r.ID == 0 
      select r.Name; 

स्रोत प्रकार 'System.Data.DataTable' के लिए क्वेरी पैटर्न के एक कार्यान्वयन नहीं मिल सका। 'कहाँ' नहीं मिला

तो मैं अपने Googling जारी रखा और कुछ है कि काम मिल गया:

var rowColl = ds.Tables[0].AsEnumerable(); 
string name = (from r in rowColl 
       where r.Field<int>("ID") == 0 
       select r.Field<string>("NAME")).First<string>(); 

आप क्या सोचते हैं?

+0

यदि आप'AsNumerable 'का उपयोग करना चाहते हैं तो डीएल' System.Data.DataSetExtensions 'और इसके लिए एक उपयोग कथन जोड़ना सुनिश्चित करें! – KennyZ

+0

ऊपर से जारी की गई टिप्पणी: यदि आप 'अनावश्यक' का उपयोग करना चाहते हैं तो डीएल 'System.Data.DataSetExtensions' को जोड़ना सुनिश्चित करें! इसके लिए एक प्रयोग कथन नहीं है! बस System.Data का उपयोग करना और .dll के लिए संदर्भ होने से यह काम पर आ जाएगा। – KennyZ

+1

ध्यान रखें कि 'AsEnumerable' आपकी क्वेरी के संदर्भ को स्विच करेगा, इसलिए आपकी' कहां/चयन' स्मृति में किया जाएगा, न कि डीबी पक्ष पर। – James

0
var name = from DataRow dr in tblClassCode.Rows where (long)dr["ID"] == Convert.ToInt32(i) select (int)dr["Name"]).FirstOrDefault().ToString() 
0

उपयोग LINQ और Enumerable के रूप में डेटा तालिका सेट और डेटा तालिका क्षेत्र से मेल खाता है कि आप के लिए क्या देख रहे से क्षेत्रों का चयन करें।

उदाहरण

मैं मुद्रा तालिका जहां मुद्रा स्थानीय मुद्रा है से मुद्रा ईद और मुद्रा का नाम मिलता है, और फार्म पर मुद्रा आईडी और एक पाठ बॉक्स के लिए नाम प्रदान करना चाहते हैं:

DataTable dt = curData.loadCurrency(); 
      var curId = from c in dt.AsEnumerable() 
         where c.Field<bool>("LocalCurrency") == true 
         select c.Field<int>("CURID"); 

      foreach (int cid in curId) 
      { 
       txtCURID.Text = cid.ToString(); 
      } 
      var curName = from c in dt.AsEnumerable() 
          where c.Field<bool>("LocalCurrency") == true 
          select c.Field<string>("CurName"); 
      foreach (string cName in curName) 
      { 
       txtCurrency.Text = cName.ToString(); 
      } 
1

तो वापसी मान स्ट्रिंग है और आप उपयोग कर सकते हैं आप आईडी के आधार पर खोज करने की जरूरत है:

string name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name")).ToString(); 

या जीई का उपयोग कर neric चर:

var name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name")); 
+1

आप यह भी उपयोग कर सकते हैं: स्ट्रिंग नाम = डेटाटेबल। ASEnumerable()। कहां (पंक्ति => कनवर्ट करें। IInt32 (पंक्ति ["आईडी"]) == आईडी)। चयन करें (पंक्ति => पंक्ति। फ़ील्ड ("नाम"))।प्रथम(); – mbadeveloper

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