如何在C#LINQ ForEach循环中执行多个操作

时间:2013-08-14 11:37:56

标签: c#

我有一个Question对象列表,我使用ForEach来遍历列表。对于每个对象,我执行.Add将其添加到我的实体框架中,然后添加到数据库中。

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

我需要修改ForEach中的每个对象,并将AssignedDate字段设置为DateTime.Now。有没有办法可以在ForEach循环中执行此操作?

6 个答案:

答案 0 :(得分:50)

你会做类似

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

查看Action Delegate

中的示例
  

以下示例演示了Action委托的用法   打印List对象的内容。在此示例中,打印   method用于向控制台显示列表的内容。在   另外,C#示例还演示了匿名的使用   将内容显示到控制台的方法。注意这个例子   没有显式声明一个Action变量。相反,它通过了   对带有单个参数的方法的引用   不返回List.ForEach方法的值,其单一   参数是一个Action委托。同样,在C#示例中,一个   Action委托没有显式实例化,因为   匿名方法的签名与。的签名相匹配   List.ForEach方法所期望的Action委托。

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
 */

答案 1 :(得分:2)

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

或者如果您坚持在ForEach

上使用List<>方法
add.ForEach(itemToAdd  => 
{
   Do_first_thing(itemToAdd);
   Do_Second_Thing(itemToAdd);
});

就个人而言,我会选择第一个,更清楚。

答案 2 :(得分:1)

很可能你不需要这样做。只需使用普通的foreach

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

除非有特殊原因要使用lambda,否则foreach更清晰,更易读。作为额外的奖励,它不会强迫您将问题集合实现到列表中,最有可能减少应用程序的内存占用。

答案 3 :(得分:0)

使用foreach声明

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

或作为旁观者建议在_obj.AssignedDate = DateTime.Now;方法中执行.ForEach(

答案 4 :(得分:0)

喜欢这个

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

                    });

答案 5 :(得分: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);
    });