2008-09-06 16 views
7

मुझे पता है कि आप row.count या tables.count देख सकते हैं, लेकिन क्या यह बताए जाने के अन्य तरीके हैं कि कोई डेटासेट खाली है या नहीं?सी # में, डेटासेट खाली होने पर परीक्षण करने का सबसे अच्छा तरीका क्या है?

उत्तर

17

मैं की तरह कुछ सुझाव है: -

bool nonEmptyDataSet = dataSet != null && 
    (from DataTable t in dataSet.Tables where t.Rows.Count > 0 select t).Any(); 

संपादन: मैं काफी कारण पर विचार के बाद कोड को साफ कर दिया है, मुझे लगता है कि यह बहुत क्लीनर है। केनी के उपयोग के बारे में प्रेरणा के लिए बहुत धन्यवाद .एनी()।

public static class ExtensionMethods { 
    public static bool IsEmpty(this DataSet dataSet) { 
    return dataSet == null || 
     !(from DataTable t in dataSet.Tables where t.Rows.Count > 0 select t).Any(); 
    } 
    } 

ध्यान दें, के रूप में कीथ ठीक ही मुझे अपने पद की टिप्पणियों में पर सही है, इस विधि भी जब काम करेंगे -:

कीथ के सुझाव के साथ लाइन में, यहाँ इस दृष्टिकोण का एक विस्तार विधि संस्करण है डेटा सेट शून्य है।

+0

ओच। मैंने इसे कई बार संपादित किया है, मुझे लगता है ... अब यह एक समुदाय पोस्ट है! ओह अच्छा। :-) – ljs

5

क्या

(aDataSet.Tables.Count == 0)

साथ गलत क्या है?

+0

ऐसा लगता है कि लेखक को परिभाषित करता है "खाली डाटासेट" कोई तालिकाओं के साथ या खाली टेबल के किसी भी संख्या के साथ डाटासेट के रूप में। – vitule

+0

यदि आप मूल पोस्ट देखते हैं (संपादन लिंक पर क्लिक करें) तो आप देखेंगे कि "या tables.count" जोड़ा गया है। उस परिवर्तन से पहले, मेरा प्रश्न समझदार था ... –

+0

समस्या यह है कि 2013 एएसपी.नेट 4.0 के अनुसार यह है कि डेटासेट क्रैश – philw

0

स्पष्ट होने के लिए, आपको पहले सभी डेटाटेबल्स को देखने की आवश्यकता होगी, और फिर प्रत्येक डेटाटेबल के लिए पंक्तियों की गिनती देखें।

3

मैं सिर्फ उस उद्देश्य

कोड नीचे एक अंग्रेजी वाक्य की तरह पढ़ना चाहिए के लिए एक छोटे से स्थिर util वर्ग बनाया है।

public static bool DataSetIsEmpty(DataSet ds) 
    { 
     return !DataTableExists(ds) && !DataRowExists(ds.Tables[0].Rows); 
    } 

    public static bool DataTableExists(DataSet ds) 
    { 
     return ds.Tables != null && ds.Tables.Count > 0; 
    } 

    public static bool DataRowExists(DataRowCollection rows) 
    { 
     return rows != null && rows.Count > 0; 
    } 

मैं बस नीचे कोड की तरह कुछ डालूंगा और इसके साथ किया जाएगा। लिखने योग्य कोड लिखना गिनती है।

 if (DataAccessUtil.DataSetIsEmpty(ds)) { 
      return null; 
     } 
2

मुझे लगता है कि यह एक ऐसा स्थान है जहां आप सी # 3 में एक विस्तार विधि का उपयोग कर सकते हैं ताकि सुगमता में सुधार हो सके।

तथ्य यह है कि विस्तार के तरीकों हमेशा संकलक इस भले ही डाटासेट जाँच की जा रही रिक्त है काम करेंगे द्वारा विस्तारित किया जाता है के कारण

kronoz के विचार का उपयोग करना ...

public static bool IsNotEmpty (this dataset) 
{ 
    return dataSet != null && (
     from DataTable t in dataSet.Tables 
     where t.Rows.AsQueryable().Any() 
     select t).AsQueryable().Any(); 
} 

//then the check would be 
DataSet ds = /* get data */; 

ds.IsNotEmpty(); 

संकलन समय पर इस बदल गई है:

ds.IsNotEmpty(); 

//becomes 

DataSetExtensions.IsNotEmpty(ds); 
+0

यह एक अच्छा विचार है, हालांकि pedantic होने के लिए t.Rows.Any() लाइन डेटासेट के रूप में संकलित नहीं होगी .ables। पंक्तियां DataRowCollection है जो IENumerable को लागू नहीं करती है।कोई भी() उपलब्ध नहीं है। – ljs

+0

ओह, और अधिक गंभीर रूप से महत्वपूर्ण होने के लिए खेद है, लेकिन डेटासेट शून्य होने पर एक्सटेंशन विधि काम नहीं करेगी, बल्कि NullReferenceException उठाया जाएगा। इसके अलावा IsEmpty() इसके विपरीत के विपरीत लौट रहा है - यह इंगित करता है कि यह * खाली नहीं है !! – ljs

+0

प्रतिक्रिया के लिए धन्यवाद। हालांकि यह नल के साथ काम करेगा। – Keith

0
#region Extension methods 

public static class ExtensionMethods 
{ 
    public static bool IsEmpty(this DataSet dataSet) 
    { 
     return dataSet == null || dataSet.Tables.Count == 0 || !dataSet.Tables.Cast<DataTable>().Any(i => i.Rows.Count > 0); 
    } 
} 

#endregion 
+0

क्या यह एक अच्छा विचार है और फिर "मैन्युअल" उस तरह की सभी पंक्तियों के माध्यम से जांचें? – Kache

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

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