如何在 LINQ 中返回第一个子值

本文关键字:第一个 返回 LINQ | 更新日期: 2023-09-27 18:31:49

使用 LINQ,如何仅获取以下 XML 的作者元素值:

<?xml version="1.0" encoding="utf-8"?>
<quotes>
  <category name="Sport">
    <author>James Small
      <quote>Quote One</quote>
      <quote>Quote Two</quote>
    </author>
  </category>
  <category name="Music">
     <author>
      Stephen Swann
     <quote />
    </author>
  </category>
</quotes>

我是 LINQ 的新手,但我试过

   Dim quotesXMLList As IEnumerable(Of XElement) = From n In q.Descendants("category") _
                                                   Select n
    For Each n In quotesXMLList
        authorList.Add(n.Value)
    Next

但 n.value 返回作者和所有子元素值。

如何在 LINQ 中返回第一个子值

此查询返回所有作者姓名:

var authorNames =
    from category in q.Elements("category")
    from author in category.Elements("author")
    from textNode in author.Nodes().OfType<XText>()
    select textNode.Value;

这将安全地检索第一个孩子:

list.Where(x => x.Children.Any()).Select(x => x.Children.First());

您可以通过更改 XML 来使您的生活更轻松:

<?xml version="1.0" encoding="utf-8"?>
<quotes>
  <category name="Sport">
    <author>
      <name>James</name>
      <quote>Quote One</quote>
      <quote>Quote Two</quote>
    </author>
  </category>
  <category name="Music">
     <author>
      <name>Stephen</name>
     <quote />
    </author>
  </category>
</quotes>

然后,您可以使用以下内容获取名称:

var nodes = 
from item in xdoc.Descendants("name")
select new {author = item.Value};