将代码注入Linq

时间:2010-11-11 16:46:43

标签: linq

我想将foreach转换为Linq

foreach (var e in  x.Root.Element("Body").Elements())
{
   Block b = new Block();
   b.Text = e.Element("Text").Value;
   b.RadioButtons = e.Element("RadioButtons").Elements().Select(j => j.Value.ToString()).ToList();
   m.BlockList.Add(b);
}

我可以将一些代码放入Linq查询吗?

3 个答案:

答案 0 :(得分:4)

为什么呢?这是代码非常易读并且有副作用。它应该保持为foreach循环。

答案 1 :(得分:3)

我不确定这是否正是您正在寻找的,但这应该有效:

var bodyElements = x.Root.Element("Body").Elements()).Select(e => new Block
        {
            Text = e.Element("Text").Value,
            RadioButtons = e.Element("RadioButtons").Elements().Select(j => j.Value.ToString()).ToList()
        }).ToList();

        m.BlockList.AddRange(bodyElements);

希望这有帮助!

答案 2 :(得分:1)

这样做的一种方法是在LINQ查询中project一个新的Block对象:

m.BlockList = (
    from e in x.Root.Element("Body").Elements()
    select new Block {
        Text = e.Element("Text").Value,
        RadioButtons = (
            from j in e.Element("RadioButtons").Elements()
            select j.Value.ToString()
        ).ToList(),
    }
).ToList();

如果m.BlockList已经包含项目并且您想保留它们,如果它支持AddRange(),您可以执行以下操作:

m.BlockList.AddRange(
    from e in x.Root.Element("Body").Elements()
    select new Block {
        Text = e.Element("Text").Value,
        RadioButtons = (
            from j in e.Element("RadioButtons").Elements()
            select j.Value.ToString()
        ).ToList(),
    });

其他人是正确的:你的代码可能很好。