2012-04-18 7 views
5

मैं निम्नलिखित LINQ क्वेरीनिरर्थक वस्तु का मूल्य होना चाहिए - क्यों?

from p in dc.Purchases 
where invoiceNumber == null || p.InvNumber == invoiceNumber.Value 
select p; 

'INVOICENUMBER' एक नल पूर्णांक है - जब यह शून्य है, कार्यक्रम फेंकता है एक 'Nullable वस्तु एक मूल्य त्रुटि होना आवश्यक है'। ऐसा क्यों होता है जब यह स्पष्ट रूप से जांच कर रहा है कि यह शून्य है या नहीं? क्या इसके चारों ओर एक रास्ता है?

धन्यवाद,

+3

क्या आप शून्य चाल को 'invoiceNumber.HasValue' में बदलते हैं तो कोई अंतर है? –

+0

आप किस लिंक प्रदाता का उपयोग कर रहे हैं? लिंक से एसक्यूएल, इकाई ढांचे, वस्तुओं के लिए linq ...? – AakashM

+0

LINQ से SQL। HasValue – Chris

उत्तर

0

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

from p in dc.Purchases 
where invoiceNumber == null ||(invoiceNumber!=null && p.InvNumber == invoiceNumber.Value) 
select p; 
+2

मतलब नहीं है - || ऑपरेटर यह दूसरा तर्क ही अगर पहले एक झूठी – Bond

0

चेक यह एक

from p in dc.Purchases 
where (invoiceNumber == null ? p.InvNumber == null : p.InvNumber == invoiceNumber.Value) 
select p; 
0

क्या

के बारे में
from p in dc.Purchases 
where (invoiceNumber ?? p.InvNumber) == p.InvNumber 
select p; 

लेकिन, मैं, सवाल पैदा होता अगर invoiceNumber है 012,इस कथन को क्यों चलाते हैं?

+0

का मूल्यांकन यदि यह रिक्त है का मूल्यांकन करेंगे, यह सब कुछ – Chris

+0

को पुनः प्राप्त करेगा @Chris, इसलिए, कि जहां खंड अपने डेटाबेस पर अमल करने के लिए और अधिक कुशल हो जाएगा बिना एक और बयान। – Jodrell

0

किसी नलबल के मूल्य की जांच करने के लिए HasValue प्रॉपर्टी का उपयोग करें।

from p in dc.Purchases 
where !invoiceNumber.HasValue || p.InvNumber == invoiceNumber.Value 
select p; 
0

आप बता नहीं है, लेकिन मुझे लगता है कि p.InvNumber रूप में अच्छी तरह व्यर्थ है।

from p in dc.Purchases 
where invoiceNumber == null || p.InvNumber == invoiceNumber 
select p; 
0

आप स्पष्ट रूप से अशक्त के लिए जाँच करने की जरूरत नहीं है: उस मामले में, .Value प्रयोग नहीं करते। शून्य मामलों के साथ दो मामले हो सकते हैं या तो यह शून्य होगा या कुछ मूल्य होगा।

उदा

मामला 1-

int ? invoiceNumber = null; 
var prods = from p in dc.Purchases 
      where p.InvNumber == invoiceNumber 
      select p; 

मामला 2-

int ? invoiceNumber = 100; 
var prods = from p in dc.Purchases 
      where p.InvNumber == invoiceNumber 
      select p; 

ही LINQ बयान दोनों ही मामलों में काम करेंगे।

+0

केस 1 में क्लॉज क्यों है? – Jodrell

+0

मैं सिर्फ यह दिखाना चाहता हूं कि उसी लिनक क्वेरी दोनों मामलों में काम करेगी। या तो चालान संख्या शून्य है या इसका कुछ मूल्य है। – userGS

0

nullable प्रकार की मूल अवधारणा है ... अंतर्निहित प्रकार में डेटाबेस की प्रोग्रामिंग के साथ लचीलापन बढ़ाने के लिए इसकी श्रेणी + null मान में निर्दिष्ट सभी मान होंगे।

नल प्रकार दो केवल पढ़ने के लिए गुण 1) HasValue 2) Value

HasValueboolean प्रकार है और यह अपने आप अगर मूल्य इसमें कुछ महत्व है सही पर सेट किया जाता है। तो, तुलना के लिए, आपको HasValue पहले और फिर Value का उपयोग करना होगा। यू सीधे Value उपयोग करते हैं, और अगर यह null है, तो ऊपर अपवाद उत्पन्न हो जाएगा।

मन में इन रखते हुए, मैं इस टुकड़ा भी शक है ,.जहां invoiceNumber == null आप invoiceNumber.Value==null (नहीं INVOICENUMBER) की कोशिश करनी चाहिए

या

where invoiceNumber.HasValue && p.InvNumber == invoiceNumber.Value 

धन्यवाद

0

समस्या Linq-Sql करने के लिए हो सकता है - यह इतना INVOICENUMBER SQL करने के लिए जहां बयान कन्वर्ट करने के लिए कोशिश कर रहा है। मूल्य भी कहा जा सकता है यह शून्य है।

कृपया invoiceNumber == null || p.InvNumber == invoiceNumber कहां से प्रयास करें।

आशा है कि यह मदद करेंगे।

2

मुझे लगता है कि आपकी क्वेरी में कुछ गड़बड़ है। आपके द्वारा प्रदान किए गए कोड से मुझे लगता है कि invoiceNumber एक स्थानीय चर या पैरामीटर है। यदि यह मामला है, तो आप अपनी क्वेरी में invoiceNumber == null की जांच क्यों कर रहे हैं? इस तरह की जांच क्वेरी से अलग से की जानी चाहिए:

if(invoiceNumber == null) 
{ 
    return dc.Purchases; 
    // the query would evaluate to this because invoiceNumber == null will allways return true. 
} 
else 
{ 
    return 
     from p in dc.Purchases 
     where p.InvNumber == invoiceNumber.Value 
     select p; 
}