使用 LINQ 获取多个节点值

本文关键字:节点 LINQ 获取 使用 | 更新日期: 2023-09-27 18:31:52

假设你有以下XML结构。

 <Class>
  <Students>
    <Student>
      <StudentNo>555</StudentNo>
      <Firstname>Joe</Firstname>
      <Lastname>Smith</Lastname>
    </Student>
     <Student>
      <StudentNo>222</StudentNo>
      <Firstname>Smith</Firstname>
      <Lastname>Joe</Lastname>
    </Student>
  <Students>
</Class>

并且您希望使用 linq 获取所有名字和姓氏。现在我得到了以下内容

foreach (XElement x in data.Descendants("Student").SelectMany(e => data.Descendants("Firstname")))
            {
                Console.WriteLine(x.Value);
            }

但是我怎么能得到姓氏呢?

使用 LINQ 获取多个节点值

您可以使用匿名类型执行此操作:

var query=data.Descendants("Student")
              .Select(s=> new { FirstName=s.Element("FirstName").Value,
                                LastName=s.Element("Lastname").Value});

或者,您可以创建自定义类并保存结果:

var query=data.Descendants("Student")
              .Select(s=> new Student{ FirstName=s.Element("FirstName").Value,
                                       LastName=s.Element("Lastname").Value});

你可以这样写:

var firstnames = data.Descendants("Student").Select(x => x.Firstname);
var lastnames = data.Descendants("Student").Select(x => x.Lastname);

var firstAndLastnames = data.Descendants("Student").Select(x => new { Firstname = x.Firstname, Lastname = x.Lastname });