वांछित परिणाम प्राप्त करने वाले इस भयानक पाश को करने के बजाय:

foreach (var mealsViewModel in mealsListCollection)
            {
                foreach (var VARIABLE in mealsViewModel.Items)
                {
                    foreach (var d in VARIABLE.ArticlesAvailable)
                    {
                        d.ArticleQty = 0;

                    }

                }
            }

मैं एक ही परिणाम प्राप्त करने की कोशिश कर रहा हूं लेकिन इस linQ कथन के साथ:

mealsListCollection.ForEach(u =>
                u.Items.Select(o => o.ArticlesAvailable.Select(c =>
                {
                    c.ArticleQty = 0;
                    return c;
                })));

लेकिन linQ कथन ArticleQty को शून्य पर रीसेट नहीं करता

क्या मैं गलत हूं? और क्यों ?

1
napi15 25 जून 2018, 07:20

3 जवाब

सबसे बढ़िया उत्तर

अपने linq को ForEach में बदलें क्योंकि Select collection के माध्यम से आपकी इच्छानुसार पुनरावृति नहीं करता है। एमएसडीएन परिभाषा:-

Select अनुक्रम के प्रत्येक तत्व को एक नए रूप में प्रोजेक्ट करता है।

ForEach सूची के प्रत्येक तत्व पर निर्दिष्ट क्रिया करता है।

mealsListCollection.ForEach(u => 
     u.Items.ForEach(o => 
     o.ArticlesAvailable.ForEach(c =>
     {
         c.ArticleQty = 0;
     })));
1
Lucifer 27 जून 2018, 13:27

नेस्टेड सूचियों के पेड़ों के माध्यम से काम करने के लिए SelectMany का उपयोग करें। कार्य करने के लिए ForEach फ़ंक्शन अंतिम का उपयोग करें:

mealsListCollection
.SelectMany(m => m.Items)
.SelectMany(i => i.ArticlesAvailable)
.ToList()
.ForEach(a => { a.ArticleQty = 0; });
0
Todd 25 जून 2018, 08:02

आप जो गलत कर रहे हैं वह है: चयन आपके उसी संग्रह को वापस कर रहा है, लेकिन इसका कोई प्रभाव नहीं पड़ता है जब तक कि वस्तुओं को फिर से चालू नहीं किया जाता है। फ़ोरैच कॉल में बैठे, चयन निष्पादन पथ के बाहर हैं। (अधिक जानकारी के लिए टिप्पणियों की समीक्षा करें)।

कॉल में .select() अपने आप में कुछ खास नहीं करता है लेकिन यह निर्धारित करता है कि लौटाई गई सूची कैसी दिखेगी। .select().ToList() प्रक्षेपण को लागू करते हुए संग्रह पर पुनरावृति करता है।

यदि आप .select कॉल के बराबर एक चर सेट करते हैं, लेकिन इसके अंदर डेटा तक कभी नहीं पहुंचते हैं, तो मान अनिवार्य रूप से अभी भी वही होगा जो उन्होंने शुरू किया था। जैसे ही आप पुनरावृति करते हैं, या किसी विशिष्ट तत्व का चयन करते हैं, यह तब अनुमानों को लागू करेगा।

वसीली की टिप्पणियों के अनुसार चयनों को फ़ोरैच में बदलने से आपको वांछित परिणाम मिलेंगे।

क्या मैं शायद सुझाव दे सकता हूं कि आप अपने स्टैक (या नीचे) को 0 के बराबर मान सेट करना चाहते हैं? - आपके उपयोग के मामले को जाने बिना, हो सकता है कि आपके द्वारा चुने गए स्थान की तुलना में इसे 0 पर वापस डिफ़ॉल्ट करने के लिए एक बेहतर जगह है? (ऑटोमैपर, इनिशियलाइज़र, आदि)

0
Matthew Ciaglia 25 जून 2018, 18:44