我想将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查询吗?
答案 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(),
});
其他人是正确的:你的代码可能很好。