में मूल्य का चयन करें 10 में किसी विशेष पंक्ति के किसी विशेष कॉलम में मान का चयन करने के लिए आप LINQ (C#)
का उपयोग कैसे करते हैं। बराबर SQL
होगा:लिंक: एक डेटाटेबल कॉलम
select NAME from TABLE where ID = 0
अग्रिम धन्यवाद।
में मूल्य का चयन करें 10 में किसी विशेष पंक्ति के किसी विशेष कॉलम में मान का चयन करने के लिए आप LINQ (C#)
का उपयोग कैसे करते हैं। बराबर SQL
होगा:लिंक: एक डेटाटेबल कॉलम
select NAME from TABLE where ID = 0
अग्रिम धन्यवाद।
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;
var x = from row in table
where row.ID == 0
select row
जाना चाहिए तुम्हें एक DataTable कि पंक्तियों के बारे में जानता है, बुद्धिमान अन्य आप पंक्ति का उपयोग करना होगा है सूचकांक:
where row[rowNumber] == 0
इस उदाहरण में आप पंक्ति डेटा को अज्ञात वर्ग या प्रीपेरेड क्लैस में रखने के लिए चयन का भी उपयोग करना चाहते हैं रों
मैं दूसरों गैर लैम्ब्डा वाक्यविन्यास दे दिया है तो बस यह पूरा मैं लैम्ब्डा वाक्यविन्यास बराबर में डाल देता हूँ के लिए नोटिस (यदि आप किसी अन्य विधि के लिए इसे पारित करना चाहते हैं):
गैर लैम्ब्डा (के रूप में जेम्स की पोस्ट के अनुसार):
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 });
वहाँ वास्तव में बहुत व्यावहारिक अंतर, बस व्यक्तिगत राय है जिस पर आप पसंद करते हैं नहीं है।
मुझे लगता है कि आपका लैम्ब्डा उत्तर चिह्नित एक से सही है। SingleOrDefault() पंक्ति के सभी कॉलम लाएगा (यह ओपी अनुरोध नहीं है, ओपी केवल एक कॉलम के लिए अनुरोध किया गया है)। कहां() और चयन() संयोजन केवल सभी कॉलम लाने से आवश्यक कॉलम लाएगा। अगर मैं गलत हूं तो कृपया मुझे सही करें। – gsk
हाँ, आप सही हैं। आप अभी भी अंत में ".SingleOrDefault()" कर सकते हैं (उदाहरण: 'स्ट्रिंग नाम = DataContext.MyTable.Where (i => i.ID == 0)। चयन करें (i => i.Name) .SingleOrDefault(); 'केवल 1 कॉलम से पूछताछ करेगा)। सिंगलऑर्डफॉल्ट के बारे में स्वाभाविक रूप से "fetch-all" कुछ भी नहीं है, आपको इसके लिए केवल प्रश्नों को चेन करने की आवश्यकता है। ऐसा कहकर, प्रदर्शन ओवरहेड आमतौर पर नगण्य है जब तक कि आपके पास अन्य कॉलम में कुछ बहुत बड़ा डेटा न हो। – fyjham
आपके उत्तरों के लिए धन्यवाद। मुझे समझ में नहीं आया कि किस प्रकार का ऑब्जेक्ट "मायटेबल" था (आपके उत्तरों में) और निम्नलिखित कोड ने मुझे नीचे दी गई त्रुटि दी।
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>();
आप क्या सोचते हैं?
यदि आप'AsNumerable 'का उपयोग करना चाहते हैं तो डीएल' System.Data.DataSetExtensions 'और इसके लिए एक उपयोग कथन जोड़ना सुनिश्चित करें! – KennyZ
ऊपर से जारी की गई टिप्पणी: यदि आप 'अनावश्यक' का उपयोग करना चाहते हैं तो डीएल 'System.Data.DataSetExtensions' को जोड़ना सुनिश्चित करें! इसके लिए एक प्रयोग कथन नहीं है! बस System.Data का उपयोग करना और .dll के लिए संदर्भ होने से यह काम पर आ जाएगा। – KennyZ
ध्यान रखें कि 'AsEnumerable' आपकी क्वेरी के संदर्भ को स्विच करेगा, इसलिए आपकी' कहां/चयन' स्मृति में किया जाएगा, न कि डीबी पक्ष पर। – James
var name = from DataRow dr in tblClassCode.Rows where (long)dr["ID"] == Convert.ToInt32(i) select (int)dr["Name"]).FirstOrDefault().ToString()
उपयोग 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();
}
तो वापसी मान स्ट्रिंग है और आप उपयोग कर सकते हैं आप आईडी के आधार पर खोज करने की जरूरत है:
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"));
आप यह भी उपयोग कर सकते हैं: स्ट्रिंग नाम = डेटाटेबल। ASEnumerable()। कहां (पंक्ति => कनवर्ट करें। IInt32 (पंक्ति ["आईडी"]) == आईडी)। चयन करें (पंक्ति => पंक्ति। फ़ील्ड
टिप्पण लायक है कि एक SingleOrDefault कॉल बुला वास्तव में सभी स्तंभों एक बार SQL में शाब्दिक अनुवाद का चयन करेंगे (यह एक IQueryable की तुलना में एक MyTable ऑब्जेक्ट के रूप में नहीं बल्कि)। तालिका में और क्या है, इस पर निर्भर करता है कि प्रदर्शन प्रभाव हो सकता है जो चुनिंदा विधि नहीं होगी। एक ठेठ तालिका पर पठनीयता छोटे प्रदर्शन अंतर के लिए तर्कसंगत है लेकिन चूंकि सवाल समकक्ष एसक्यूएल के बारे में था, मैंने सोचा कि यह स्पष्ट करने योग्य था। – fyjham
सिंगलऑर्डडिल्ट का सबसे उचित रूप से उपयोग किया जाता है जब आप किसी सेट से एक अनन्य आइटम पुनर्प्राप्त करना चाहते हैं। जो इसकी आवाज से ओपी है। – James
यह सिंगलऑर्डफॉल्ट के रूप में काम करता है। धन्यवाद – ianbeks