27.4.3 使用LINQ进行遍历和查询

我们编写代码来查询前文生成的XML文档(c:\books.xml),该代码将查询title节点的值包含“计算机”的节点,并把该节点的值放入结果集,如代码清单27-11所示。

代码清单27-11 使用LINQ进行遍历和查询


using System;

using System.Linq;

using System.Xml.Linq;

namespace ProgrammingCSharp4

{

class XmlHandleSample

{

public static void Main()

{

try

{

XDocument doc=XDocument.Load(@"c:\books.xml");

XElement root=doc.Element("books");

var books=from b in root.Elements()

where b.ToString().IndexOf(“计算机”)>-1

select b.Element("title").Value;

foreach(var book in books)

{

Console.WriteLine("Book:{0}",book);

}

}

catch(System.Exception)

{

Console.WriteLine(“处理过程出错,请检查。”);

throw;

}

}

}

}


上述代码的运行结果如下:


Book:计算机程序设计艺术(第一卷,第三版)

请按任意键继续……


上述代码的要点:使用XDocument对象的Load静态方法加载XML文档到内存中。分析LINQ查询表达式的语法:


var books=from b in root.Elements()

where b.ToString().IndexOf(“计算机”)>-1

select b.Element("title").Value;


其中要点如下:

❑from子句指定了数据源root.Elements(),意即root节点的所有子节点的集合;

❑这里的变量b是迭代变量;

❑where子句根据其后的布尔表达式来筛选出符合条件的元素;

❑select子句指定所选对象的哪部分数据应该作为结果放入结果集,这里为符合要求的节点的文本值。

图27-4演示了最终放入结果集的数据——由select子句指定的、符合要求的节点的文本值。

27.4.3 使用LINQ进行遍历和查询 - 图1

图 27-4 使用LINQ查询表达式查询符合要求的数据