首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将代码注入Linq

将代码注入Linq
EN

Stack Overflow用户
提问于 2010-11-12 00:46:43
回答 3查看 209关注 0票数 1

我想把foreach转换成Linq。

代码语言:javascript
复制
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中放入一些代码吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-12 00:54:03

我不确定这是否是你想要的,但这应该是可行的:

代码语言:javascript
复制
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);

希望这能有所帮助!

票数 3
EN

Stack Overflow用户

发布于 2010-11-12 00:51:30

为什么?这是一段可读性很强的代码,而且有副作用。它应该仍然是一个foreach循环。

票数 4
EN

Stack Overflow用户

发布于 2010-11-12 00:53:29

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

代码语言:javascript
复制
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(),您可以执行以下操作:

代码语言:javascript
复制
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(),
    });

然而,其他人是正确的:您的代码可能是正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4156860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档