更改列表中列表内每个字符串项的值

时间:2015-04-17 19:19:15

标签: c# .net linq

让我们说我有一个有孩子名单的班级爸爸:

public class Dad
{
    public List<Kid> kids = new List<Kid>();;
}

每个孩子都有一个玩具:

public class Kid
{
    public List<string> Toys = new List<string>();
}

作为样本,我有爸爸的集合:

Dad d1 = new Dad();
Kid k1 = new Kid();
k1.Toys.Add("toy1");
k1.Toys.Add("toy2");
d1.Kids.Add(k1);
List<Dad> dads = new List<Dad> { d1 };

我正在努力了解如何执行爸爸名单的LINQ以将每个孩子的玩具名称改为大写。

类似的东西:

var dadsWithKidsWithChangeToysName = dads.Select(dad => dad.Kids.Select(kid => kid.Toys.ForEach(toy => toy.ToUpper())));

2 个答案:

答案 0 :(得分:3)

LINQ用于查询,不用于修改。 您不应该将其用于修改。而是使用简单的迭代(foreach / for)等。

您可以使用LINQ根据现有列表创建新的List Dad,如:

var modifiedDads = dads.Select(d => new Dad()
{
    Kids = d.Kids.Select
        (
            k => new Kid()
            {
                Toys = k.Toys.Select(t => t != null ? t.ToUpper() : t).ToList()
            }
        ).ToList()
}).ToList();

答案 1 :(得分:1)

如果你的类有一个接受IEnumerable的构造函数,你可以这样得到它:

    public class Dad
    {
        public List<Kid> kids = new List<Kid>();

        public Dad(IEnumerable<Kid> kids)
        {
            this.kids = kids.ToList();
        }
    }
    public class Kid
    {
        public List<string> Toys = new List<string>();

        public Kid(IEnumerable<string> toys)
        {
            Toys = toys.ToList();
        }
    }

    var dads = new List<Dad> {
        new Dad(new [] { new Kid(new [] { "a", "b" }) }),
        new Dad(new [] { new Kid(new [] { "c", "d" }) }),
    };

    var dadsWithKidsWithChangeToysName = dads.Select(d => new Dad(d.kids.Select(k => new Kid(k.Toys.Select(t => t.ToUpper())))));