【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节

时间:2021-11-29 19:06:56

最近在看这本书,特翻译书中部分内容。

示例 1-1. Hello LINQ

【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节using  System;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
using  System.Linq;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
string [] greetings  =   {"hello world""hello LINQ""hello Apress"} ;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节var items 
= 【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节from s  in  greetings
                  
where  s.EndsWith( " LINQ " )
                   select s;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
foreach  (var item  in  items)
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节    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查询示例

【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节using  System;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
using  System.Linq;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
using  System.Xml.Linq;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节XElement books 
=  XElement.Parse(
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
@" <books>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<book>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<title>Pro LINQ: Language Integrated Query in C# 2008</title>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<author>Joe Rattz</author>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节</book>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<book>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<title>Pro WF: Windows Workflow in .NET 3.0</title>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<author>Bruce Bukovics</author>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节</book>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<book>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<title>Pro C# 2005 and the .NET 2.0 Platform, Third Edition</title>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节<author>Andrew Troelsen</author>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节</book>
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节</books>
" );
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节var titles 
= 【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节from book  in  books.Elements( " book " )
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
                 where  ( string ) book.Element( " author " ==   " Joe Rattz "
                 【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节select book.Element(
" title " );
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
foreach (var title  in  titles)
    【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节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查询一个示例数据库。

【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节using  System;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
using  System.Linq;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
using  System.Data.Linq;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
using  nwind;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节Northwind db 
=   new  Northwind( @" Data Source=.\SQLEXPRESS;Initial Catalog=Northwind " );
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节var custs 
= 【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节from c  in  db.Customers
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
                 where  c.City  ==   " Rio de Janeiro "
                 【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节select c;
【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节
foreach  (var cust  in  custs)
    【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第一章,第一节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可能是您的最佳答案。