2010-12-01 9 views
5

यहां आवश्यक डेटा प्रकारों के बारे में पूरी तरह उलझन में है।कनवर्ट करें LINQ ObjectQuery IQueryable IENumerable

मैं इस Linq बयान है:

   var feat = AllCustomers 
        .Select(c => c.CustomerServices.SelectMany(cs => cs.CustomerServiceFeatures) 
        .SelectMany(csf => csf.ConfigElements).Where(ce => ce.Name == "ItemType").Select(ce => ce.Value).Distinct()); 

यह आवश्यक डेटा देता है, और वी.एस. कि प्रकार सेट किया जा रहा है मुझसे कहता है के रूप में:

System.Data.Objects.ObjectQuery<System.Collections.Generic.IEnumerable<string>> 

हालांकि मैं में यह डेटा शामिल करना चाहते हैं स्ट्रिंग की एक सूची:

List<string> itemTypes = new List<string>(); 
itemTypes.AddRange(feat); 

लेकिन यह एक त्रुटि फेंकता है:

Argument 1: cannot convert from 'System.Linq.IQueryable<System.Collections.Generic.IEnumerable<string>>' to 'System.Collections.Generic.IEnumerable<string>' 

मुझे सही प्रकार के लिए कास्ट करने के लिए आवश्यक वाक्यविन्यास नहीं मिल रहा है। क्या कोई मदद कर सकता है?

चीयर्स, मैट

उत्तर

8

संकलन समय त्रुटि दिखाता है, कि feat "स्ट्रिंग के संग्रह का संग्रह" है (शाब्दिक रूप से "स्ट्रिंग के IENumerable का IQueryable")। तो आपको फ्लैट संग्रह उत्पन्न करने की आवश्यकता है।

feat.SelectMany(x => x) 
+1

उत्तर इस पूरे चेहरे पर मुझे सही ढंग से देख रहा था, मैं इसके अलावा SelectMany() चाल के सभी प्रकार की कोशिश कर रहा था। इसके अलावा .. यह जवाब Google के लिए बहुत मुश्किल था! –

0

आप

List<string> list = feat.ToList<string>() 
+0

मैंने आपको कम नहीं किया लेकिन यह काम नहीं करता है। संग्रह को फ़्लैट करने के लिए आपको SelectMany() की आवश्यकता है। – Rap

0

उपयोग कर सकते हैं आप की सूची के साथ क्या करने की जरूरत पर निर्भर करता है तुम सिर्फ कर सकते हैं:

var itemTypes = feat.ToList(); 
1

System.Data.Objects.ObjectQuery<T>System.Linq.IQueryable<T> के एक कार्यान्वयन है। आपका प्रकार, हालांकि, IENumerable ऑब्जेक्ट्स का एक IQueryable है। एक SelectMany करें, इसलिए अब आपके पास स्ट्रिंग संग्रह का संग्रह नहीं है, लेकिन केवल स्ट्रिंग का संग्रह है।

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