2011-01-11 24 views
5

मुझे यह निर्धारित करने की आवश्यकता है कि एक IQueryable विधि डेटा के साथ वापस आती है, या इसे "खाली" राडग्रिड के डेटासोर्स पर लागू करते समय:खाली खाली होने पर रिक्त IQueryable वापसी क्या होती है?

RadGrid.DataSource = Method(x); 

     if (Method(x) == yyy) 
     { 
      button.Enabled = true; 
     } 
     else 
     { 
      button.Enabled = false; 
     } 

मैंने "शून्य" का उपयोग करने की कोशिश की है " yyy "लेकिन कोई सफलता के साथ। कोड के माध्यम से कदम उठाने पर, IQueryable विधि "खाली" के रूप में लौटाता है लेकिन मुझे यकीन है कि अगर कोई कथन का उपयोग कर सत्यापित किया जाए।

एक IQueryable विधि वापस लौटाता है जैसे कि यह खाली के रूप में लौटाता है, और अगर मैं एक स्टेटमेंट का उपयोग कर सत्यापित कर सकता हूं?

उत्तर

12

आप उपयोग कर सकते हैं किसी भी() अगर वहाँ IQueryable में किसी भी तत्व हैं देखने के लिए जाँच करने के लिए:

RadGrid.DataSource = Method(x); 

if (Method(x).Any()) 
{ 
    button.Enabled = true; 
} 
else 
{ 
    button.Enabled = false; 
} 

(या, वैकल्पिक रूप से, छोटे संस्करण :)

button.Enabled = Method(x).Any(); 
+0

क्या कोई अतिरिक्त संदर्भ है जिसका उपयोग करने की आवश्यकता होगी। कोई()? क्योंकि इसे संकलित करने का प्रयास करते समय मुझे त्रुटियां मिल रही हैं। – Lando

+1

@Lando: आमतौर पर, यदि आप पहले से ही IQueryable का उपयोग कर रहे हैं, तो इसे "बस काम करना चाहिए" - यह Queryable.Any पर एक विस्तार विधि है (http://msdn.microsoft.com/en-us/library/bb534338.aspx) - अपनी फ़ाइल के शीर्ष पर 'System.Linq;' का उपयोग करना सुनिश्चित करें, साथ ही System.Core.dll के संदर्भ में भी सुनिश्चित करें। –

+0

यह वही है जो मैंने पाया था। जैसा कि मैं अपने सभी मौजूदा पृष्ठों पर LINQ का उपयोग करता हूं, सिस्टम.लिंक; संदर्भ पृष्ठ के शीर्ष पर पहले से मौजूद है। मैं अपने तरीकों को एक अलग .dll के माध्यम से एक्सेस कर रहा हूं जिसे मैंने पहले बनाया है ... इससे कोई अंतर नहीं होना चाहिए? – Lando

-2

इस प्रयास करें:

if (Method(x) == Enumerable.Empty<YourType>()) 
{ 
    // Your code 
} 

Enumerable.Empty<TResult>() के बाद से कैश किया गया है TResult के लिए यह Method से reterned खाली अनुक्रम के रूप में ही संदर्भ का आयोजन करेगा और इसलिए equatable हो जाएगा।

यदि आप अनिश्चित हैं या नहीं, इस काम करेंगे कर रहे हैं, इस उदाहरण चलाने करें:

using System; 
using System.Linq; 

class Example 
{ 
    static void Main() 
    { 
     var first = Enumerable.Empty<Example>(); 
     var second = Enumerable.Empty<Example>(); 

     Console.WriteLine(object.ReferenceEquals(first, second)); 
    } 
} 
+0

मुझे लगता है कि यह एक संदर्भ है सामान्य रूप से तुलना और विफल रहता है। – jason

+0

-1 यह संदर्भ तुलना करेगा। यह स्पष्ट होना चाहिए कि यह लगभग हर मामले में क्यों काम नहीं करेगा। यह विधि * केवल * काम करेगा यदि विधि 'संख्यात्मक' है। लक्षण () '- और ज्यादातर मामलों में यह कुछ अन्य गणित लौटाएगा जिसमें कोई तत्व नहीं है। – cdhowie

+0

यहां मेरा काउंटर उदाहरण है: 'सार्वजनिक स्थैतिक आईनेमेरेबल खाली () {उपज ब्रेक; } सार्वजनिक स्थैतिक बूल टेस्ट() {वापसी खाली () == संख्यात्मक। लक्षण (); } '। 'टेस्ट()' झूठी वापसी करेगा, जैसा कि इसे करना चाहिए। यह केवल तभी काम करेगा जब विधि को 'एन्यूमेरेबल' कहा जा सके। लक्षण () '- सभी रिक्त संख्याएं बराबर नहीं हैं। 'Enumerable.Any ()' का उपयोग करना एक बेहतर तरीका है। – cdhowie

5

आप IQueryable.Any उपयोग करना चाहते हैं।

bool empty = !queryable.Any(); 
if(empty) { 
    // something 
} 
0

RadGrid.DataSource = Method(x);    
if (RadGrid.DataSource as MyObject == null)   
{    
     button.Enabled = true;   
}   
else   
{    
     button.Enabled = false;   
} 
संबंधित मुद्दे