2013-08-14 6 views
17

के अंदर एकाधिक संचालन कैसे कर सकता हूं मेरे पास प्रश्न ऑब्जेक्ट्स की एक सूची है और मैं सूची के माध्यम से पुन: प्रयास करने के लिए ForEach का उपयोग करता हूं। प्रत्येक ऑब्जेक्ट के लिए मैं अपने इकाई ढांचे और फिर डेटाबेस में जोड़ने के लिए .Add करता हूं।मैं सी # LINQ फॉरएच लूप

List<Question> add = problem.Questions.ToList(); 
add.ForEach(_obj => _uow.Questions.Add(_obj)); 

मैं ForEach में वस्तुओं में से प्रत्येक को संशोधित करने और DateTime.Now को AssignedDate क्षेत्र सेट करना होगा। क्या ForEach लूप के अंदर मैं ऐसा कर सकता हूं?

+4

की तरह बस एक सादे पुराने 'foreach' बयान का उपयोग करें। जब तक आपके पास लैम्ब्डा का उपयोग करने के लिए विशिष्ट कारण नहीं है, जो कि बहुत ही असंभव है, तो आप इसे अनावश्यक रूप से जटिल बना रहे हैं। – Jon

+0

आप '_obj => {संचालन का समूह}' कर सकते हैं लेकिन मैं इसकी अनुशंसा नहीं करता हूं। सरल foreach बहुत साफ है –

+0

वैसे मैं उम्मीद कर रहा था कि एक ऐसा तरीका होगा जैसा कि मैं बाद में इसका उपयोग कर सकता था। फॉरएच बहुत साफ दिखता है और मैंने हाल ही में इसके बारे में सीखा है। – Melina

उत्तर

32

आप की तरह

add.ForEach(_obj => 
       { 
        _uow.Questions.Add(_obj); 
        Console.WriteLine("TADA"); 
       }); 

कुछ करना होगा Action Delegate

में उदाहरणों पर एक नज़र निम्न उदाहरण कार्रवाई प्रतिनिधि का उपयोग एक सूची ऑब्जेक्ट की सामग्री मुद्रित करने के लिए यह दर्शाता है है। इस उदाहरण में, प्रिंट विधि कंसोल में सूची की सामग्री को प्रदर्शित करने के लिए उपयोग की जाती है। अतिरिक्त में, सी # उदाहरण कंसोल में सामग्री प्रदर्शित करने के लिए अज्ञात विधियों का उपयोग भी प्रदर्शित करता है। ध्यान दें कि उदाहरण स्पष्ट रूप से एक क्रिया चर घोषित नहीं करता है। इसके बजाए, यह को एक विधि का संदर्भ देता है जो एक पैरामीटर लेता है और सूची में कोई मान वापस नहीं करता है। फॉरएच विधि, जिसका एकल पैरामीटर एक कार्य प्रतिनिधि है। इसी प्रकार, सी # उदाहरण में, कार्य प्रतिनिधि स्पष्ट रूप से तत्काल नहीं किया गया है क्योंकि अज्ञात विधि का हस्ताक्षर के हस्ताक्षर से मेल खाता है जो सूची द्वारा अपेक्षित है। फ़ॉरएच विधि।

using System; 
using System.Collections.Generic; 

class Program 
{ 
    static void Main() 
    { 
     List<String> names = new List<String>(); 
     names.Add("Bruce"); 
     names.Add("Alfred"); 
     names.Add("Tim"); 
     names.Add("Richard"); 

     // Display the contents of the list using the Print method. 
     names.ForEach(Print); 

     // The following demonstrates the anonymous method feature of C# 
     // to display the contents of the list to the console. 
     names.ForEach(delegate(String name) 
     { 
      Console.WriteLine(name); 
     }); 

     names.ForEach(name => 
     { 
      Console.WriteLine(name); 
     }); 
    } 

    private static void Print(string s) 
    { 
     Console.WriteLine(s); 
    } 
} 
/* This code will produce output similar to the following: 
* Bruce 
* Alfred 
* Tim 
* Richard 
* Bruce 
* Alfred 
* Tim 
* Richard 
*/ 
+0

इतना आसान है। :) धन्यवाद –

1

उपयोग एक foreach बयान

foreach (Question q in add) 
{ 
    _uow.Questions.Add(q); 
    q.AssignedDate = DateTime.Now; 
} 

या के रूप में astander प्रस्ताव .ForEach( विधि

2
foreach(var itemToAdd in add) 
{ 
    Do_first_thing(itemToAdd); 
    Do_Second_Thing(itemToAdd); 
} 

में _obj.AssignedDate = DateTime.Now; करते हैं या यदि आप List<>

पर ForEach विधि का उपयोग पर जोर देते हैं जाएगा
add.ForEach(itemToAdd => 
{ 
    Do_first_thing(itemToAdd); 
    Do_Second_Thing(itemToAdd); 
}); 

व्यक्तिगत रूप से मैं पहले के साथ जाऊंगा, यह स्पष्ट है।

1

अधिकतर आपको इस तरह से काम करने की आवश्यकता नहीं है। बस एक सादे foreach का उपयोग करें:

foreach (var question in problem.Questions) 
{ 
    question.AssignedDate = DateTime.Now; 
    _uow.Questions.Add(question); 
} 

जब तक वहाँ एक लैम्ब्डा उपयोग करने के लिए विशेष कारण, एक foreach अधिक स्पष्ट और पठनीय है। एक अतिरिक्त बोनस के रूप में यह आपको किसी सूची में प्रश्नों के संग्रह को पूरा करने के लिए मजबूर नहीं करता है, संभवतः आपके एप्लिकेशन की मेमोरी पदचिह्न को कम करता है।

+0

धन्यवाद जॉन। प्रतिबिंब पर हाँ मैं आपसे सहमत हूं। हालांकि मुझे दूसरे जवाब को स्वीकार करना पड़ा क्योंकि यह मेरे प्रश्न के साथ सबसे अच्छा फिट बैठता है। आपकी मदद/सलाह के लिए धन्यवाद। – Melina

1

इस

add.ForEach(_obj => 
        { 
         _obj.AssignedDate = DateTime.Now; 
         _uow.Questions.Add(_obj); 

        }); 
0
add.ForEach(delegate(Question q) 
    { 
     // This is anonymous method and you can do what ever you want inside it. 
     // you can access THE object with q 
     Console.WriteLine(q); 
    }); 
+0

क्या आपने गलत उत्तर दिया या क्या? यहां कोई लिंक नहीं है :) – Katu

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