【问题标题】:OR operator in XDocument.Descendants LINQ queryXDocument.Descendants LINQ 查询中的 OR 运算符
【发布时间】:2015-09-08 20:40:51
【问题描述】:

我有一组 XML 文件,其中包含两个可能的根节点值,但具有相同的结构和子元素。我遍历每个文件并构建一个Object 类型的对象r,然后将其添加到一个新的objects 集合中:

foreach (var file in files)
{
    var r = from x in file.Descendants("RootNode")
        select new Object
        {
            Field = ((string) x.Element("Field"))
        };
    objects.AddRange(r);
}

我想做这样的事情:

var r = from x in file.Descendants("RootNode") || file.Descendants("OtherRootNote") 

但除了有两个循环之外,无法找到一种合乎逻辑的方法。这是唯一的方法吗?

【问题讨论】:

  • 我相信我可以使用.Union(),但这仍然需要我编写两个select 块来创建我的Object,这并不理想。
  • 是的,您确实可以使用 Union() - 后代返回 IEnumerable<Element>,因此您可以对其执行标准 LINQ。

标签: c# asp.net xml linq xmldocument


【解决方案1】:

您可以使用Descendants() 枚举所有后代,然后添加标准where clause 以过滤具有所需名称的那些:

            var r = from x in file.Descendants()
                    where x.Name == "RootNode" || x.Name == "OtherRootNode"
                    select new Object
                    {
                        Field = ((string)x.Element("Field"))
                    };

reference source 开始,overloadsDescendants() 都只是线性遍历元素树,因此自己进行名称检查在计算上并不复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多