2012-09-19 11 views
12

से अपग्रेड करने के बाद "इंडेक्स सीमा से बाहर था" विजुअल स्टूडियो 2010 से 2012 तक अपग्रेड करने के बाद कोड ने फेंकना शुरू किया "ArgumentOutOfRangeException - अनुक्रमणिका सीमा से बाहर था। गैर-ऋणात्मक और कम से कम होना चाहिए संग्रह का आकार। पैरामीटर का नाम: इंडेक्स "लिंक का उपयोग करके लिंक पूछताछ पर।लिंक से ईएफ में शामिल हों VS2010 से VS2012

सरल LINQPad में किए गए (एक एफई डेटा मॉडल का उपयोग कर) उदाहरण मुझे ArgumentOutOfRangeException देता है निम्नलिखित:

void Main() 
{ 
    var iq1 = Customers.Select(ap => ap.ID); 
    var iq2 = iq1.Join(Customers.Select(ap => ap.ID), 
        a => a, 
        b => b, 
        (a, b) => new { a }); 

    iq2.Dump(); 
} 

पिछले उदाहरण बदलने के दोनों किनारों से युक्त एक गुमनाम वस्तु लौटने के लिए शामिल होने नहीं देता उम्मीद ArgumentOutOfRangeException और देता है परिणाम के रूप में:

void Main() 
{ 
    var iq1 = ActionPlans.Select(ap => ap.ID); 
    var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID), 
        a => a, 
        b => b, 
        (a, b) => new { a, b }); 

    iq2.Dump(); 
} 

ठीक है, तो किसी कारण से मैं में शामिल होने के दोनों ओर लौटना पड़ा, लेकिन फिर मैं निम्न उदाहरण के बजाय एक डमी मूल्य का उपयोग कर, वह भी एक जनसंपर्क के बिना निष्पादित करने की कोशिश की oblem:

void Main() 
{ 
    var iq1 = ActionPlans.Select(ap => ap.ID); 
    var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID), 
        a => a, 
        b => b, 
        (a, b) => new { a, x = 1 }); 

    iq2.Dump(); 
} 

पहला उदाहरण ले रहा है और पहली क्वेरी करने के लिए एक ToList() जोड़ने भी यह एक समस्या के बिना निष्पादित करता है:

void Main() 
{ 
    var iq1 = ActionPlans.Select(ap => ap.ID).ToList(); 
    var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID), 
        a => a, 
        b => b, 
        (a, b) => new { a }); 

    iq2.Dump(); 
} 

महत्वपूर्ण: बिना एक कार्य केंद्र पर पहली क्वेरी की कोशिश कर रहा विजुअल स्टूडियो 2012 अपग्रेड ठीक काम करता है!

क्या कोई इस नई "फीचर" की पुष्टि/व्याख्या कर सकता है? :-)

+2

यह बग दायर किया गया है [लिंक से ईएफ में शामिल हों "इंडेक्स सीमा से बाहर था" VS2010 से VS2012 तक अपग्रेड के बाद] (https://connect.microsoft.com/VisualStudio/feedback/details/763986/linq- टू-EF-जोड़-फेंकता सूचकांक-आउट-ऑफ-सीमा के बाद उन्नयन-से-VS2010 करने वाली vs2012) था। यदि आप इसे पुन: उत्पन्न कर सकते हैं, तो माइक्रोसॉफ्ट को बताएं। यदि आपके लिए एक फिक्स महत्वपूर्ण है, तो वहां "अपवॉट" करें। –

उत्तर

6

इरविन, सिर्फ इस पर पाश बंद करने के लिए: हमने पुष्टि की है कि यह एक बग है जिसे हमने हाल ही में LINQ से Entities में पेश किया है और हम एक फिक्स आउट करने के तरीकों को देख रहे हैं। इसकी रिपोर्ट करने के लिए बहुत बहुत धन्यवाद!

+0

हे @divenga .. इस मुद्दे के बारे में कोई अद्यतन? टीम को VS2012 में अपग्रेड करने के बाद हमारी पूरी परियोजना रोक दी गई है! – alaasdk

+1

हम कुछ अन्य लोगों के साथ भेजकर इस बग को ठीक करने के लिए काम कर रहे हैं। मुझे यकीन नहीं है कि यह व्यावहारिक है, लेकिन जैसा कि आपने पाया है, अनाम प्रकार के लिए दूसरी डमी संपत्ति जोड़ना इस मुद्दे के आसपास काम करेगा। –

+0

हे @ अलास्डक क्या आप हमसे संपर्क कर सकते हैं netfx45compat पर माइक्रोसॉफ्ट डॉट कॉम पर? मैं आपकी टीम को अनब्लॉक करने में मदद करना चाहता हूं। – Varun

4

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

उदाहरण के बाद

मुझे "ArgumentOutOfRangeException - सूचकांक सीमा से बाहर था" देता है:

void Main() 
{ 
    var iq1 = ActionPlans.Select(ap => ap.ID).ToList(); 
    var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID), 
        a => a, 
        b => b, 
        (a, b) => new { a }); 

    iq2.Dump(); 
} 

यह अगले उदाहरण काम करता है के रूप में उम्मीद:

void Main() 
{ 
    var iq1 = ActionPlans.Select(ap => ap.ID).ToList(); 
    var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID), 
        a => a, 
        b => b, 
        (a, b) => a); 

    iq2.Dump(); 
} 
संबंधित मुद्दे