语言级集成查询(LinQ)是一种新的通过Dot net 查询数据的统一的方法。现在已经有大量的关于LinQ的强大功能的讨论了,并且假如你已经有测试它的性能的机会的话,你一定认可上面的这些讨论的。假如用一些很简短的话证明Linq是一个一流的,有效地数据存取的方法的话,我想说 几乎任何数据结构(数组,关系数据,集合,)都可以通过LinQ变成数据源
虽然dot net包含一个管理XML的库(System.XML),LinQ to XML扩展了这个命名空间,带来了标准的查询操作并将这些操作和XML文档组合在一起(System.XML.Linq)。我们可以将XML文档加载到内存中,通过用LinQ语句来查询它。对于一个已经习惯于SQL查询的开发者来讲,Linq语句似乎是一个XXX语言。但是这样的语句逻辑更清晰,查询实现更自然。
现在让我们开始讨论应用了Linq to XML 的一些基础的例子,简单的XML文档将从这儿被找到,它是被微软用于一些关于XML操作的简单例子中的,但被稍微修改版的文档,为了测试这些操作,我已经用Visual Studio 2008 Beta 2 建立一个新的控制台应用程序(这是最快显示结果的方式) 。所以你必须妥善的将这些包含XML测试文件包含到简单的项目中。
我们可以通过XDocument 类的Load方法将XML文档加载到内存中,我选择这种方法加载的原因是我的第一个例子包含了一个根元素<catalog>,否则你想直接面向于文档中的某一特定元素,你可以用XElement的Load方法, 于是说,我们想呈现所有包含在<Catalog>中的主要元素,于是所有的<Book>元素
XDocument xmlFile = XDocument.Load("books.xml");
var query = from c in xmlFile.Elements("catalog").Elements("book")
select c;
foreach (XElement book in query) 
...{
Console.WriteLine(book.Value.ToString());
}
var query = from c in xmlFile.Elements("book")
where (string)c.Attribute("checked-out").Value == "false"
select c;
foreach (var book in query) 
...{
Console.WriteLine("\”...{0}\” is available", book.Element("title").Value);
}
var query = from c in xmlFile.Descendants("description")
where c.Value.Contains(".NET")
select c; 

Console.WriteLine("We found ...{0} book(s) on .NET", query.Count());
var query = from c in xmlConfigFile.Descendants("book")
group new 
...{
Author = (string)c.Element("author"), BookValue = (double)c.Element("value")
}
by (string)c.Element("author")
into groupedData
select new 
...{
AuthorName = groupedData.Key, BooksTotalValue = groupedData.Sum(rec => rec.BookValue)
};
foreach (var v in query) 
...{
Console.WriteLine("Author: ...{0}; Value of all this author's books: {1}", v.AuthorName, v.BooksTotalValue);
}