代码之家  ›  专栏  ›  技术社区  ›  illya

XDocument中的OR运算符。后代LINQ查询

  •  1
  • illya  · 技术社区  · 9 年前

    我有一组XML文件,其中包含两个可能的根节点值,但具有相同的结构和子元素。我循环浏览每个文件并构建一个对象 r 类型的 Object 然后添加到新的 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") 
    

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

    1 回复  |  直到 9 年前
        1
  •  1
  •   dbc    9 年前

    您可以使用 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 二者都 overloads 属于 后代() 只需在元素树中进行线性遍历,因此自己进行名称检查在计算上并不复杂。