2010-08-12 13 views
7

मैं इस त्रुटि हो रही है:"... पैरामीटर रहित कन्स्ट्रक्टर और प्रारंभकर्ता समर्थित हैं ..." त्रुटि का मतलब क्या है?

Only parameterless constructors and initializers are supported in LINQ to Entities. 

जब इस कोड (के साथ चारों ओर खेलने के लिए इस कोड here और बनाया परीक्षण डेटाबेस पाया जाता है) को चलाने के लिए कोशिश कर रहा है:

XElement xml = new XElement("contacts", 
        from c in db.Contacts 
        orderby c.ContactId 
        select new XElement("contact", 
           new XAttribute("contactId", c.ContactId), 
           new XElement("firstName", c.FirstName), 
           new XElement("lastName", c.LastName)) 
        ); 

जहां डाटाबेस ऑटो बनाई गई है इकाइयों वस्तु। काम करने के लिए इसे कैसे प्राप्त करें इस पर कोई विचार?

उत्तर

6

मुझे विश्वास है कि यह इस तथ्य पर आक्षेप कर रहा है कि आप एक एक्सलेमेंट कन्स्ट्रक्टर का उपयोग कर रहे हैं जो आपके "चयन" खंड में पैरामीटर लेता है। चूंकि XElement में पैरामीटर रहित कन्स्ट्रक्टर नहीं है, इसलिए आपको अज्ञात प्रकार का चयन करने के लिए अपना कोड बदलना पड़ सकता है, और तथ्य के बाद XElement संग्रह प्रारंभ करना पड़ सकता है।

var els = from c in db.Contacts 
      orderby c.ContactID 
      select new { c.ContactID, c.FirstName, c.LastName }; 

var xml = new XElement("contacts", 
    els.ToList() 
     .Select(e => new XElement("contact", 
         new XAttribute("contactID", e.ContactID), 
         new XElement("firstName", e.FirstName), 
         new XElement("lastName", e.LastName)))); 

यह अनचाहे है, लेकिन उम्मीद है कि आपको यह विचार मिल जाएगा। मैं पहले ईएफ क्वेरी कर रहा हूं, और फिर उस पर ToList() को कॉल कर रहा हूं ताकि मैं XF के बजाय ऑब्जेक्ट्स का उपयोग करके XElement संग्रह का चयन कर सकूं।

+0

धन्यवाद! वह काम करता है जो महत्वपूर्ण हिस्सा है :)! मैं अभी भी उलझन में हूं कि मूल कोड क्यों काम नहीं करता है, मैंने अन्य समान उदाहरणों को XML दस्तावेज़ बनाने के लिए देखा है। कोई विचार? – Evan

+0

त्रुटि से, ऐसा लगता है कि ईएफ सिर्फ उन ऑब्जेक्ट्स का चयन करने का समर्थन नहीं करता है जिनमें पैरामीटर रहित ctors नहीं हैं। मुझे नहीं पता कि यह सीमा क्यों मौजूद है, लेकिन हां, समीकरण के बाहर ईएफ क्वेरी खींचने से समस्या हल हो जाती है। –

+0

धन्यवाद। इस जवाब ने आज मेरी मदद की। – jessegavin

1

मैं इस तरह यह पुनर्लेखन होगा:

XElement xml2 = new XElement("contacts", 
        from c in 
        ((IEnumerable<Contact>)(from c in Contacts 
        orderby c.ContactId 
        select c)) 
       select new XElement("contact", 
         new XAttribute("contactId", c.ContactId), 
         new XElement("firstName", c.FirstName), 
         new XElement("lastName", c.LastName)) 
      ); 

बिंदु XElement इन्स्टेन्शियशन से LINQ निष्पादन पेड़ अलग करने के लिए है। IQeriable से IENumerable तक LINQ क्वेरी कास्टिंग करके, आप कोड को अलग कर देंगे LINQ आपके XElements बनाने के लिए जा रहे कोड से डेटा प्राप्त करने के लिए उपयोग करेगा।

+0

दिलचस्प विचार ... मैं हाल ही में इस ईएफ सीमा के खिलाफ आया था और @ मैट के समाधान के समान कुछ के साथ चला गया। अब [AsEnumerable के लिए दस्तावेज़] (http://msdn.microsoft.com/en-us/library/bb335435.aspx) पर देख रहे हैं, ऐसा लगता है कि यह वही है जो इसके लिए डिज़ाइन किया गया है ... – shambulator

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