2010-07-07 15 views
7

मेरे पास निम्न लिंक क्वेरी है:लिंक त्रुटि - "समर्थित नहीं किया गया अपवाद: क्वेरी ऑपरेटर के लिए उपयोग नहीं किया गया असमर्थित ओवरलोड 'चुनें'

var tmp = 
    from container in Container 
    join containerType in ContainerType on container.ContainerType equals containerType 
    where containerType.ContainerTypeID == 2 
    select new { ContainerID = container.ContainerID, TypeID = container.ContainerTypeID}; 

var results = tmp.Select((row, index) => new { row.ContainerID, row.TypeID, ContainerIndex = index }) 

जैसा कि, यह ठीक काम करता है। यदि मैं निम्नलिखित जोड़ता हूं, तो मैं परिणाम लिंककैड में देख सकता हूं, मुझे इस संदेश के शीर्षक में वर्णित त्रुटि मिलती है:

results.Dump(); 

यह त्रुटि एक लिंककैड त्रुटि नहीं है, यह लिंक से आ रही है, और मैं नहीं समझ में नहीं आता इसका क्या अर्थ है।

धन्यवाद।

+0

भी देखें जॉन की जवाब देने के लिए मेरी टिप्पणी अपने पिछले प्रश्न के। –

उत्तर

15

ठीक है, मुझे एहसास नहीं हुआ था कि Container प्रारंभ करने के लिए SQL डेटा स्रोत से LINQ था। मूल रूप से यह दूसरे प्रोजेक्शन को SQL में परिवर्तित करने में विफल रहा है।

तो, आप के बजाय .NET में सिर्फ इतना है कि थोड़ा क्या करना चाहते हैं - आप AsEnumerable साथ Enumerable.Select उपयोग करने के लिए यह मजबूर कर सकते हैं:

var results = tmp.AsEnumerable() 
       .Select((row, index) => new { row.ContainerID, row.TypeID, 
               ContainerIndex = index }); 
+0

मुझे खेद है, मुझे इसका उल्लेख करना चाहिए था। आपकी सहायता के लिए धन्यवाद. –

+0

मुझे एक ही परेशानी का सामना करना पड़ा है, और 'एएसएनेमरेबल()' का उपयोग करके भी काम करता है। +1। लेकिन यह क्यों काम करता है? 'System.Data.Linq.Table से क्यों 'मैं नई ऑब्जेक्ट को पुन: सक्रिय/चयन नहीं कर सकता? – markzzz

+0

@markzzz: यह एक बात है कि प्रक्षेपण होता है। हालांकि यह एक पूछताछ योग्य है, आप जो कुछ भी कर रहे हैं उसे एसक्यूएल में परिवर्तित करने के लिए कह रहे हैं ... जबकि आपने 'AsNumerable' का उपयोग करने के बाद, इसका मतलब है कि सबकुछ स्थानीय रूप से किया जाता है। –

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