当前位置:  开发笔记 > 编程语言 > 正文

LINQ to XML可选元素查询

如何解决《LINQtoXML可选元素查询》经验,为你挑选了1个好方法。

我正在使用现有的XML文档,其结构(部分)如下:


    
         Bob 
         1 
    
    
         Larry 
    

我正在使用LINQ to XML来查询XDocument以检索所有这些条目,如下所示:

var items = from g in xDocument.Root.Descendants("Group").Elements("Entry")
    select new
    {
        name = (string)g.element("Name").Value,
        id = g.Elements("ID").Count() > 0 ? (string)g.Element("ID").Value : "none"
    };

"ID"元素并不总是存在,因此我对此的解决方案是上面的Count()爵士乐.但我想知道是否有人有更好的方法来做到这一点.我仍然对这些新东西感到满意,我怀疑可能有更好的方法来做到这一点,而不是我现在正在做的事情.

有没有更好/更优选的方式来做我想要的?



1> Jacob Carpen..:

XElement实际上有一些有趣的显式转换运算符,在这种情况下做正确的事情.

因此,您很少需要访问该.Value属性.

这就是您投影所需的全部内容:

var items =
    from g in xDocument.Root.Descendants("Group").Elements("Entry")
    select new
    {
        name = (string) g.Element("Name"),
        id = (string) g.Element("ID") ?? "none",
    };

如果您更喜欢ID在匿名类型中使用整数值:

var items =
    from g in xDocument.Root.Descendants("Group").Elements("Entry")
    select new
    {
        name = (string) g.Element("Name"),
        id = (int?) g.Element("ID"),
    };


参见http://www.hanselman.com/blog/ImprovingLINQCodeSmellWithExplicitAndImplicitConversionOperators.aspx for Hanselman对它的看法
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有