【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
最近在看这本书,特翻译书中部分内容。
示例 1-1. Hello LINQ
using System.Linq;
string[] greetings = {"hello world", "hello LINQ", "hello Apress"};
var items =from s in greetings
where s.EndsWith("LINQ")
select s;
foreach (var item in items)
Console.WriteLine(item);
注意:示例1-1代码是在VS2008中创建了一个控制台应用程序项目。如果不能使用Linq,你可以使用using指令添加System.Linq命名空间。
运行结果为:
hello LINQ
XML查询
对于简单的示例1-1,而示例1-2 将会看到 LINQ 在 .NET 开发者手中显示出来的潜在力量。
示例显示了 LINQ 的易用性之一,可以方便的到XML API 与可扩展标记语言(XML)交互、查询。
你应该特别注意,我是如何通过编程的方式与构造一个对象名为Books的XML 数据进行交互的。
示例 1-2 一个简单的使用LINQ到XML的XML查询示例
using System.Linq;
using System.Xml.Linq;
XElement books = XElement.Parse(
@"<books>
<book>
<title>Pro LINQ: Language Integrated Query in C# 2008</title>
<author>Joe Rattz</author>
</book>
<book>
<title>Pro WF: Windows Workflow in .NET 3.0</title>
<author>Bruce Bukovics</author>
</book>
<book>
<title>Pro C# 2005 and the .NET 2.0 Platform, Third Edition</title>
<author>Andrew Troelsen</author>
</book>
</books>");
var titles =from book in books.Elements("book")
where (string) book.Element("author") == "Joe Rattz"
select book.Element("title");
foreach(var title in titles)
Console.WriteLine(title.Value);
注意:示例1-2代码需要添加System.Xml.Linq.dll 集合到项目引用中。如果它尚未被添加。还要注意我
使用 using 添加了the System.Xml.Linq 命名空间。
欲行结果:
Pro LINQ: Language Integrated Query in C# 2008
你是否注意到我是如何解析XML数据到对象类型XElement中的?我没有创建XMLDocument。
LINQ 到 XML 的好处是扩展XML API。现在,根据 W 3 C 文档对象模型 (DOM) XML API 需要,
替代了 XmlDocument,LINQ 到 XML 允许开发人员使用XElement 类进行Element级别交互。
注意:在增加查询功能中,LINQ到XML中、在处理XML数据上提供了一个更强大、简单易用的接口。
还要注意的是我使用了类似于 SQL-like 的语法来查询 XML 数据,好像它就是一个数据库。
Query a SQL Server Database
我的下一个实例演示如何适用LINQ到SQL查询database2数据表。在示例1-3,我查询
标准Microsoft Northwind示例数据库。
示例1-3. 适用LINQ到SQL查询一个示例数据库。
using System.Linq;
using System.Data.Linq;
using nwind;
Northwind db = new Northwind(@"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind");
var custs =from c in db.Customers
where c.City == "Rio de Janeiro"
select c;
foreach (var cust in custs)
Console.WriteLine("{0}", cust.CompanyName);
注意:示例1-3代码需要添加System.Xml.Linq.dll 集合到项目引用中。如果它尚未被添加。还要注意我
使用 using 添加了the System.Xml.Linq 命名空间。你能看到我使用using添加了nwind的引用。
为了能使例子运行起来,你必须使用SQLMetal命令行实用程序,或者使用对象关系
设计器(Object Relational Designer),生成Microsoft Northwind标准数据库的映射实体类。
后面相会有改部分的介绍。
注意:你可能需要在示例1-3中的构造中适当的修改连接字符串以便能连接到Northwind数据库。
后面将会有该部分的介绍。
运行结果:
Hanari Carnes
Que Delícia
Ricardo Adocicados
这个简单的例子演示了如何查询 Northwind 数据库 Customers 表 中城市为 Rio de Janeiro 的所有客户。
更明显的是这个查询集成到语言,并且意味着我获得语言-级别的支持,其中包括语法检查和智能感知。
写一个SQL查询字符串,并且直到运行时你还没有做语法错误检查的日子将不会在来。设想你要写
依赖Customers表中一个字段的子句,但是你不记得这个字段的名字?智能感知将会显示表中所有字段。
在前面的示例中一旦你键入c.,智能感知会显示出Customers表中的所有字段。
LINQ到Objects
LINQ到Objects:IEnumerable<T> API接口的标准查询操作。它允许你在数组和内存集合数据中执行查询。
标准查询操作是静态System.Linq.Enumerable类中的静态方法,你可以使用它创建LINQ到Objects查询。
LINQ到XML
LINQ到XML:LINQ API 专门处理 XML。这个接口在LINQ的以前预发行版本之前叫XLINQ。
Microsoft不只是添加了用LINQ处理XML的类库,它已经涉及到标准的XML DOM,从而更便于处理 XML
中的其他缺陷。为了使用XML中的一小部分而创建一个XmlDocument的日子将不会在来。使用LINQ到XML,
你必须在你的项目中添加System.Xml.Linq.dll 集合引用,并且使用下面指令添加引用:
using System.Xml.Linq。
LINQ到DataSet
LINQ到DataSet:LINQ API 关于DataSets。许多开发者有大量的现有代码都依靠DataSet。那些将不能被留下来,
获取他们需要利用 LINQ 的强大功能来重写其代码。
LINQ到SQL
LINQ到SQL:IQueryable<T> API 允许 LINQ 查询处理Microsoft’s SQL Server数据库。这个接口在LINQ的
以前预发行版本之前叫DLinq。使用LINQ到SQL,你必须在你的项目中添加 System.Data.Linq.dll 集合引用,
并且使用下面指令添加引用:using System.Data.Linq。
LINQ到Entities
LINQ到Entities是一个选择LINQ API 使用数据库的接口。它通过注入两者之间的逻辑映射从物理数据库分离
实体对象模型。
分离是增加的强大功能和灵活性,以及复杂性。 因为 LINQ 到Entities似乎是在核心 LINQ 框架之外,
它在本书中将不会涉及。 然而,如果您发现您需要比 LINQ 到 SQL 更大的灵活性,它将是值得考虑
作为替代的方法。特别是,如果您需要您的实体对象模型和数据库之间解耦合,实体对象包含来自多个
数据表的数据,或更大灵活性建模您的实体对象,LINQ 到Entities可能是您的最佳答案。