2013-08-23 2 views
6

किसी सूची ऑब्जेक्ट के एकाधिक मान कैसे सेट करें, मैं निम्नलिखित कर रहा हूं लेकिन विफल रहता है।लैम्ब्डा अभिव्यक्ति का उपयोग करके सूची में एकाधिक मान कैसे सेट करें?

objFreecusatomization 
.AllCustomizationButtonList 
.Where(p => p.CategoryID == btnObj.CategoryID && p.IsSelected == true && p.ID == btnObj.ID) 
.ToList() 
.ForEach(x => x.BtnColor = Color.Red.ToString(), ); 

कॉमा के बाद अंत में मैं एक और मूल्य निर्धारित करना चाहता हूं। अभिव्यक्ति क्या होनी चाहिए, हालांकि मेरे पास केवल एक रिकॉर्ड प्रासंगिक है।

+2

संग्रह को संशोधित करने के लिए LINQ का दुरुपयोग न करें। यह एक प्रश्न उपकरण है। आपका दृष्टिकोण 'foreach' से अधिक पठनीय नहीं है लेकिन यह बहुत कम कुशल है। –

+0

फिर यह एक लैम्डा अभिव्यक्ति होना चाहिए जो काम कर सकता है? या किसी अन्य तरीके से, या मुझे वस्तु लेने के बाद इसे लूप करने की आवश्यकता है। – NoviceToDotNet

उत्तर

12

खैर व्यक्तिगत रूप से मैं कोड इस तरह वैसे भी लिख नहीं होगा - लेकिन आप केवल उपयोग कर सकते हैं एक statement lambda:

एक बयान लैम्ब्डा सिवाय इसके कि कथन (नों) में संलग्न है एक अभिव्यक्ति लैम्ब्डा जैसा दिखता है ब्रेसेस

एक बयान के शरीर में लैम्ब्डा के किसी भी बयान में शामिल हो सकता है; हालांकि, अभ्यास में आम तौर पर दो या तीन से अधिक नहीं होते हैं।

तो ForEach कॉल इस प्रकार दिखाई देगा:

.ForEach(x => { 
    x.BtnColor = Color.Red.ToString(); 
    x.OtherColor = Color.Blue.ToString(); 
}); 

मैं एक foreach पाश बजाय हालांकि लिखना होगा:

var itemsToChange = objFreecusatomization.AllCustomizationButtonList 
    .Where(p => p.CategoryID == btnObj.CategoryID 
       && p.IsSelected 
       && p.ID == btnObj.ID); 

foreach (var item in itemsToChange) 
{ 
    item.BtnColor = Color.Red.ToString(); 
    item.OtherColor = Color.Blue.ToString(); 
} 

(आप foreach बयान में ही क्वेरी इनलाइन कर सकते हैं, लेकिन व्यक्तिगत रूप से मुझे एक अलग स्थानीय परिवर्तनीय स्पष्ट का उपयोग करके उपरोक्त दृष्टिकोण मिलता है।)

+0

लेकिन मुझे यकीन है कि सूची में एक रिकॉर्ड होगा, इसलिए मुझे इसे foreach के साथ लूप करने की आवश्यकता है। – NoviceToDotNet

+1

@NoviceToDotNet: यदि आप सुनिश्चित हैं कि इसमें केवल एक रिकॉर्ड होगा, तो आपको सूची बनाने के बजाय 'FirstOrDefault', 'First',' SingleOrDefault', या 'सिंगल '(जो भी सबसे अधिक लागू हो) जैसी विधियों का उपयोग करना चाहिए। । –

+2

@NoviceToDotNet: यह पहला है जिसका आपने उल्लेख किया है केवल एक मैच है। हम उसे कैसे जानते थे? आपका मूल कोड लूपिंग था ('फॉरएच' के साथ) इसलिए मैंने स्वाभाविक रूप से * लूप को * आवश्यक * माना। –

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