2013-04-24 11 views
6

यह एक बेवकूफ सवाल हो सकता है लेकिन मैंने वस्तुओं का चयन करने के लिए हमेशा linq का उपयोग किया है।क्या LINQ का उपयोग करके सूची मैनिपुलेशन करना संभव है?

लेकिन मैं जानना चाहता हूं कि अपने कीवर्ड का उपयोग करके निम्नलिखित सरल कार्य करना संभव है या नहीं।

List<OrdersInfo> ordersList 
. 
. 
. 
foreach(OrdersInfo OI in ordersList) 
     if(OI.TYPE == "P") 
      OI.TYPE = "Project"; 
     else 
     OI.TYPE = "Support"; 
+2

LINQ उत्परिवर्तन मुक्त होने के लिए है। यदि आप हेरफेर करना चाहते हैं, तो 'foreach' का उपयोग करें। – Jon

+0

धन्यवाद सभी – AngelicCore

उत्तर

4

नहीं है, LINQ(Language-Integrated Query) एक क्वेरी भाषा है और यह वास्तव में consise क्वेरी परिभाषा में चमकता है, लेकिन बहुत (गति और/या स्मृति चिंताओं) कि में हमेशा अच्छा नहीं।

यदि आप संग्रह को संशोधित करना चाहते हैं, तो आप जिस तरीके से पहले से ही ऐसा करते हैं उसके साथ रहें।

+0

टिग्रान, मैं आपके उत्तर के अधिकांश भाग से सहमत हूं, लेकिन आप LINQ का उपयोग करके सूची को संशोधित कर सकते हैं। (हालांकि नहीं होना चाहिए) – Habib

+0

+1, एकमात्र उत्तर "मत करो।" – user7116

1

LINQ संग्रह क्वेरी करने संशोधन अपने वर्तमान पाश अधिक पठनीय और बेहतर तरीका है के लिए, के लिए है, लेकिन आप LINQ विकल्प तो चाहते हैं:

तो OrderInfo एक वर्ग (संदर्भ प्रकार) है, तो आप गुण संशोधित कर सकते हैं ऑब्जेक्ट का, (आप उन्हें शून्य या नए संदर्भ निर्दिष्ट नहीं कर सकते हैं)।

var ordersList = new List<OrdersInfo>(); 
ordersList.Add(new OrdersInfo() { TYPE = "P" }); 
ordersList.Add(new OrdersInfo() { TYPE = "S" }); 
ordersList.Add(new OrdersInfo() { TYPE = "P" }); 
ordersList.Select(r => (r.TYPE == "P" ? r.TYPE = "Project" : r.TYPE = "Support")).ToList(); 

अपनी कक्षा के साथ के रूप में परिभाषित:

class OrdersInfo 
{ 
    public string TYPE { get; set; } 
} 

यहाँ स्क्रीनशॉट enter image description here

दिलचस्प बात यह है कि मैं ordersList

+0

खुश होगा अगर डाउनवॉटर गलती को इंगित कर सकता है – Habib

+0

एक वाक्य रचनात्मक गलती के बारे में निश्चित नहीं है, शायद गलती किसी को दिखा रही है कि LINQ का उपयोग करके इसे कैसे किया जाए? – user7116

+0

@sixlettervariables, सिंथेटिक रूप से इसका सही, मैंने वास्तव में इसे वीएस में परीक्षण किया। मैं मानता हूं कि यह LINQ के माध्यम से नहीं किया जाना चाहिए और मेरे पास भी मेरे उत्तर की शुरुआत में है, लेकिन यह संभव है कि यह दिखाए जाने के लिए डाउनवॉटेड हो ... हम्म। मेरे लिए नया है :) – Habib

6

आप के लिए वापस परिणाम आवंटित नहीं किया है मेरे लिए उपयोग कर सकते हैं सूची वर्ग की थैली।

ordersList.ForEach(oi => oi.TYPE = oi.TYPE == "P" ? "Project" : "Support"); 

आप IEnumerable प्रकार में foreach विधि आप अपने खुद के foreach एक्सटेंशन बना सकते हैं

public static void ForEach<T>(this IEnumerable<T> en, Action<T> action) 
{ 
    foreach(T item in en) 
    { 
     action(item); 
    } 
} 
1

ForEach एक Linq समाधान नहीं है चाहते हैं, लेकिन ऐसा लगता है कि यह है:

ordersList.ForEach(OI => OI.TYPE = OI.TYPE == "P" ? "Project" : "Support"); 

List<T> उदाहरण पर ऑनी उपलब्ध है, IEnumerable<T> पर नहीं।

+0

क्षमा करें मुझे आपका जवाब नहीं देखा गया है – binard

+0

हम एक ही समय में पोस्ट करते हैं, और हम मदद करने के लिए, प्रतिस्पर्धा नहीं करने के लिए :) –

+0

मुझे डुप्लिकेट ओआई समझ में नहीं आता है।प्रकार – AngelicCore

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