• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
微软(北京).Net俱乐部-H2O、winnerzone
一个战士一旦穿上军装拿起武器就已经做好了战斗的准备,他将被派往无数战火纷飞的战场,每一次都会有生命的危险。
但是一旦他活下来了,那些都将成为光荣的历史被讲述和回忆。对于一个新兵,危险和机遇并存,机遇大于危险和压力。
博客园    首页    新随笔    联系   管理    订阅  订阅

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

本文从一个Hello LINQ示例开始了我们的LINQ之旅。

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

示例 1-1. Hello LINQ

using System;
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;
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;
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可能是您的最佳答案。


WINNERZONE
posted @ 2008-03-24 14:49  H2O、winnerzone  阅读(3526)  评论(9)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3