2011-11-08 10 views
20

मेरा डीबीएमएल एक रिकार्ड सेट का खुलासा करता है जिसमें एक नाखुश nvarchar क्षेत्र है। यह nullable nvarchar फ़ील्ड मेरे सी # कोड में एक स्ट्रिंग के रूप में दर्शाया गया है।String.IsNullOrEmpty?

कभी-कभी यह फ़ील्ड शून्य है, कभी-कभी यह एक खाली स्ट्रिंग होती है, और कभी-कभी इसका वास्तव में एक मान होता है।

क्या String.IsNullOrEmpty() LINQ से SQL में काम करता है? उदाहरण के लिए, निम्न कार्य होगा:

var results = from result in context.Records 
       where String.IsNullOrEmpty(result.Info) == false 
       select result; 
+1

आप कोशिश कर सकते हैं, लिंककैड आपकी अग्निशामक है। (http://www.linqpad.net/) –

+1

http://stackoverflow.com/questions/1368946/linq-syntax-where-string-value-is-not-null-or-empty – hatchet

उत्तर

36

मजे की बात है, MSDN String.IsNullOrEmpty प्रति (की यह असमर्थित नहीं किया जा रहा आधार पर) समर्थित है, फिर भी मैं केवल यह not being supported के बारे में शिकायतों पा सकते हैं।

हालांकि, अगर यह काम करता है आप स्पष्ट रूप से यह एक बूलियन मान के लिए, की तुलना करनी चाहिए नहीं बजाय:

var results = from result in context.Records 
      /*XXX broke :(where !String.IsNullOrEmpty(result.Info) */ 
      where !(result.Info == null || result.Info.Equals("")) 
      select result; 
+1

का डुप्लिकेट ' टी मेरे लिए काम नहीं किया। प्रोफाइलर ने केवल खाली स्ट्रिंग की जांच की, लेकिन 'शून्य 'मान के लिए नहीं। –

17

मुझे लगता है कि अगर काम करता है पता नहीं है, लेकिन मुझे यकीन है कि यह करता हूँ:

where (result.Info ?? "") != "" 

(दृढ़ता से कोष्ठक की सलाह देते हैं, क्वेरी जनरेटर उनके बिना भ्रमित हो सकते हैं)

+2

मुझे यह पसंद है, लेकिन मुझे लगता है कि 'स्ट्रिंग.इएसनुलऑरफेक्टी' की तरह बहुत अधिक प्रलेखन के बिना समर्थित नहीं है [null coalesce ऑपरेटर दस्तावेज़ीकरण के बिना समर्थित है] (http://msdn.microsoft.com/en-us/library /bb882653.aspx)! ओए। – user7116

2

यह है कि यह एक NotSupportedException में जो परिणाम के साथ फेंके जाने उपयोग करने का प्रयास के बाद से समर्थित नहीं है इस संदेश:

विधि 'बूलियन IsNullOrEmpty (System.String)' एसक्यूएल के लिए कोई समर्थित अनुवाद है।

इसके बजाय, आप एक ही बात करने के लिए इस दृष्टिकोण का उपयोग कर सकते हैं:

var results = from result in context.Records 
       where result.Info != null && result.Info.Length > 0 
       select result; 

तुम भी लंबाई की जाँच के बजाय result.Info != String.Empty उपयोग कर सकते हैं। दोनों दृष्टिकोण काम करेंगे।

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

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