जाँच करें कि क्या डेटा में मान मौजूद है?


91

मेरे पास दो कॉलम लेखक और बुकनाम के साथ डेटाटेबल है

मैं जाँच करना चाहता हूँ कि दिए गए स्ट्रिंग मान लेखक DataTable में पहले से मौजूद है या नहीं। क्या इसे जांचने के लिए कुछ विधि बनाई गई है, जैसे कि अर्रेज़ array.contains?


8
LINQ? table.Any(t => t.Author == author);
दावियो

जवाबों:


206

आप के LINQ-to-DataSetसाथ उपयोग कर सकते हैं Enumerable.Any:

String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));

एक और तरीका है DataTable.Select:

DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
    // do something...
}

प्रश्न: क्या होगा यदि हम कॉलम हेडर को नहीं जानते हैं और हम यह जानना चाहते हैं कि क्या कोई सेल वैल्यू PEPSIकिसी भी पंक्तियों के कॉलम में मौजूद है? मैं यह पता लगाने के लिए लूप कर सकता हूं लेकिन क्या बेहतर तरीका है? -

हां, आप इस क्वेरी का उपयोग कर सकते हैं:

DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
    .Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));

System.Data.DataSetExtensionsसंदर्भ में और using System.Linq;कक्षा का उपयोग करने के लिए इन्हें जोड़ें
5377037

दो समाधानों में से, जो तेज होगा?
पॉल अलेक्जेंडर

1
@PaulAlexander: कोई बहुत अंतर नहीं है। लेकिन पुराना DataTable.Selectसिंटैक्स सीमित है, जबकि LINQ पूर्ण .NET फ्रेमवर्क या कस्टम तरीकों का उपयोग कर सकता है। तो केवल अगर आप .NET 2 में फंस गए हैं तो आपको उपयोग करना चाहिए DataTable.Select, अन्यथा मैं हमेशा LINQ पसंद करूंगा
टिम श्मेल्टर

यदि आप प्रदर्शन की परवाह करते हैं और बड़े डेटासेट हैं, tbl.Select()तो नाटकीय रूप से अन्य दृष्टिकोणों की तुलना में तेज़ है।
हेरिमनकोडर

@ टिमस्केल्टर - ग्रेट टिम। लेकिन अगर उपयोगकर्ता कॉलम नाम नहीं जानता है, लेकिन फिर भी सभी पंक्तियों को प्राप्त करना चाहता है जो खोज मूल्य से मेल खा रहा है कि यह कैसे किया जा सकता है?
चंदन कुमार

13

आप Linq का उपयोग कर सकते हैं। कुछ इस तरह:

bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0;

8
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}

अपने उपयोग खंड में जोड़ें:

using System.Linq;

और जोड़ :

System.Data.DataSetExtensions

संदर्भ के लिए।


5

आपको DataTable.Select () पद्धति का उपयोग करने में सक्षम होना चाहिए । आप हमें इस तरह से कर सकते हैं।

if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
    ...

चयन () फ़ंसीटेशन, जहाँ कथन से मेल खाते परिणामों के लिए DataRows की एक सरणी देता है।


0

यदि आप मान मौजूद हैं, तो आप डेटाबेस को IEnumberable के रूप में सेट कर सकते हैं और जाँच करने के लिए linq का उपयोग कर सकते हैं। इस लिंक को देखें

अगर रिकॉर्ड मौजूद है, तो जांच करने के लिए डेटेबल पर LINQ क्वेरी

उदाहरण दिया गया है

var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...

आप किसी भी के साथ पूरक कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.