2011-07-19 18 views
17

में 'System.Object' प्रकार का निरंतर मान बनाने में असमर्थ। मेरे पास UserTenders नाम की एक तालिका है जिसमें aspnet_Membership तालिका के साथ कई-से-एक संबंध हैं।
मैं EntityFramework 4.0 का उपयोग कर रहा हूं और जब मैं ऐसा कुछ करने की कोशिश करता हूं, तो यह त्रुटियां होती है।इकाई फ्रेमवर्क

var tenders = ctx.UserTenders 
    .Where(tender => tender.HasAdminApproved.Equals(true)) 
    .ToList(); 

त्रुटि

System.NotSupportedException
प्रकार के एक निरंतर मूल्य 'System.Object' बनाने में असमर्थ है।
इस संदर्भ में केवल प्राचीन प्रकार (जैसे इंट 32, स्ट्रिंग, और ग्विड ') समर्थित हैं।

नीचे यह स्निपेट काम करता है।

var tenders = ctx.UserTenders.ToList(); 

मेरे कोड में क्या गलत हो सकता है? ऐसा लगता है कि मैं कुछ बहुत तुच्छ याद कर रहा हूँ।

मैं चाहते हैं उन सभी पंक्तियों bit क्षेत्र है HasAdminApproved रूप true

+0

वापस सोच, मुझे लगता है कि मैं बदल कर कुछ इस तरह हल '==' के साथ 'Equals', हालांकि यह कम सुरुचिपूर्ण है। – NickHeidke

+0

'equals' को '==' के साथ प्रतिस्थापित करने का प्रयास करें। – Tocco

+4

मुझे आश्चर्य है कि आप बस 'क्यों नहीं हैं (tender => tender.HasAdminApproved) '? –

उत्तर

25

कोशिश की जगह

.Where(tender => tender.HasAdminApproved.Equals(true)) 

के साथ:

.Where(tender => tender.HasAdminApproved == true) 

या जैसा कि पहले @Ladislav Mrnka ने सुझाव दिया कि यदि आपके क्षेत्र bool?

.Where(tender => tender.HasAdminApproved) 
17

@Ladislav आप सही उत्तर (.Where(tender => tender.HasAdminApproved)) बताया फिल्टर करने के लिए है, लेकिन आप आश्चर्य है आपके पास इस संदेश मिल सकता है।

आप System.Boolean.Equals(Object obj) पर कॉल करने का प्रयास कर रहे हैं। तो आप निरंतर true मुक्केबाजी कर रहे हैं। और एल 2 ई, जैसा कि संदेश कहता है, को System.Object जैसे गैर-आदिम प्रकार के आधार के लिए कोई समर्थन नहीं है। इसलिए त्रुटि।

+1

यह स्पष्ट स्पष्टीकरण है, लेकिन संकलक ओवरलोड को क्यों चुनता है जो ऑब्जेक्ट लेता है जबकि एक अधिभार है जो बूलियन लेता है? –

+1

@AshrafSabry मुझे लगता है कि यह संकलक नहीं है जो अधिभार को चुनता है, यह है कि कैसे EF6 लैम्ब्डा अभिव्यक्तियों का निरीक्षण करके क्वेरी का निर्माण करता है, मेरा मानना ​​है कि वे इसे सुझाए गए व्यवहार के रूप में संभालने में सक्षम हो सकते हैं, तो यह काम करेगा। इसके अलावा, चूंकि यह कोई जवाब नहीं है, लेकिन केवल उत्तर की व्याख्या है, इसे ** संपादित ** का उपयोग करके स्वीकार किए गए उत्तर में जोड़ा जाना चाहिए, या मेरी राय में टिप्पणी के रूप में जोड़ा जाना चाहिए (लेकिन ठीक है, क्योंकि यह बहुत पुराना है)। – Alisson

4

मैं एक ही अपवाद एक की वजह से था अलग समस्या: निरंतर के रूप में उपयोग की जाने वाली एक स्ट्रिंग बनाम एक चर। मेरे चयन इस तरह देखा:

from p in Person 
select new Foo 
{ 
    FullName = p.FirstName + ' ' + p.LastName 
} 

बूलियन सशर्त, मैं क्वेरी में कहीं और था (अर्थात "जहां p.IsActive") ठीक काम किया। मैं एक स्ट्रिंग का उपयोग करने के लिए स्विच करना पड़ा: जाहिर है

from p in Person 
select new Foo 
{ 
    FullName = p.FirstName + " " + p.LastName 
} 

इस ओपी के सवाल का जवाब नहीं है, लेकिन तो मैं दूसरों के लिए यह पोस्ट करने के लिए चाहता था मैं चार/स्ट्रिंग मुद्दे के साथ एक समान प्रश्न खोजने में असमर्थ था 'लाभ।

2

बस का कहना चाहता था, आप भी इस्तेमाल किया जा सकता था tender.HasAdminApproved.HasValue.Equals (सही)) ... इस काम करता है जब bool की अनुमति देता है nulls

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