我想把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 query中放入一些代码吗?
发布于 2010-11-12 00:54:03
我不确定这是否是你想要的,但这应该是可行的:
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);希望这能有所帮助!
发布于 2010-11-12 00:51:30
为什么?这是一段可读性很强的代码,而且有副作用。它应该仍然是一个foreach循环。
发布于 2010-11-12 00:53:29
一种方法是在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(),
});然而,其他人是正确的:您的代码可能是正确的。
https://stackoverflow.com/questions/4156860
复制相似问题