2011-08-16 20 views
5

Parent_ObjectiveID और identityint? डेटाटाइप में शून्य प्रकारों के साथ समस्याएं हैं। मेरे कार्यक्रम में एक वस्तु वापस करनी चाहिए, लेकिन यह एक त्रुटि देता है: Sequence contains no elementsLINQ फ़ंक्शन

int? identity = null; 

Objective currentObjective = (from p in cd.Objective 
           where p.Parent_ObjectiveID == identity 
           select p).Single(); 

हालांकि, यदि मैं पहचान चर को शून्य में बदलता हूं। यह काम करता है, लेकिन मुझे समझ में नहीं आता है।

currentObjective = (from p in cd.Objective 
        where p.Parent_ObjectiveID == null 
        select p).Single(); 

क्या हो रहा है?

अद्यतन 1:

मैंने यह किया है:

if (identity == null) 
{ 
    currentObjective = (from p in cd.Objective 
         where p.Parent_ObjectiveID == null 
         select p).Single(); 
} 
else 
{ 
    currentObjective = (from p in cd.Objective 
         where p.Parent_ObjectiveID == identity 
         select p).Single(); 
} 

लेकिन मैं नहीं वास्तव में यह पसंद है।

+0

क्या आप लिंक-टू-एसक्यूएल या लिंक-टू-ऑब्जेक्ट्स के बारे में बात कर रहे हैं? मैंने बस लिंक-टू-ऑब्जेक्ट्स के साथ इसका परीक्षण किया, और यह मेरे लिए काम करता है। (.NET 4.0) – magnattic

+0

@atticae Linq से SQL –

+0

आपने इसे 'linq-to-objects' के साथ क्यों टैग किया? ;) – magnattic

उत्तर

1

LINQ इस मामले का समर्थन करने के लिए प्रतीत नहीं होता है।

This question एक ही समस्या के बारे में है। this thread भी देखें।

आप की कोशिश कर सकते:

Objective currentObjective = (from p in cd.Objective 
            where p.Parent_ObjectiveID == (identity ?? null) 
            select p).Single(); 

संपादित करें: यदि यह काम नहीं करता है, object.Equals साथ तुलना करने की कोशिश:

Objective currentObjective = (from p in cd.Objective 
            where object.Equals(p.Parent_ObjectiveID, identity) 
            select p).Single(); 
+0

मुझे यह अभी तक नहीं मिला है –

+0

मेरा संपादन देखें, यह काम करना चाहिए – magnattic

+0

पहला कोड काम करना चाहिए, हालांकि यह एक (int?) शून्य देता है और काम करने के लिए यह सिर्फ शून्य होगा। शायद मुझे उस सुपर को खत्म करने के लिए जहां क्लॉसूल और अभिव्यक्तियों के साथ काम करना चाहिए यदि –

0

मैं LINQ to SQL Null check in Where Clause पर एक लेख में पाया गया कि इस समस्या को बताते हैं। ऐसा लगता है कि आप object.Equals बजाय का उपयोग कर सकते हैं:

from p in cd.Objective 
where object.Equals(p.Parent_ObjectiveID, identity) 
select p 
+0

यह जैकब को काम नहीं करता –

0
from p in cd.Objective 
where p.Parent_ObjectiveID == identity 
select p 

'का चयन करें * उद्देश्य से जहां Parent_ObjectiveID == @identity' के लिए संकलित किया जाएगा। और,

from p in cd.Objective 
where p.Parent_ObjectiveID == null 
select p 

'उद्देश्य से चयन * जहां Parent_ObjectiveID अशक्त है' के लिए संकलित किया जाएगा।

क्लॉज 'जहां Parent_ObjectiveID == null' हमेशा आपकी 'निष्क्रियता' शून्य होने पर 'झूठी' वापस आ जाएगी।