Javen-Studio 咖啡小屋

http://javenstudio.org - C++ Java 分布式 搜索引擎
Naven's Research Laboratory - Thinking of Life, Imagination of Future

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  24 随笔 :: 57 文章 :: 170 评论 :: 4 Trackbacks

1           NET语言级集成查询能力(.NET Language Integrated Query

(原文:The LINQ Project, .NET Language Integrated Query

 

经过了最近20年,面向对象编程技术(object-oriented (OO) programming technologies)在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经认同像 类(classes)、对象(objects)、方法(methods)这样的语言特性。考察现在和下一代的技术,一个新的编程技术的重大挑战开始呈现出来,即面向对象技术诞生以来并没有解决降低访问和整合信息数据(accessing and integrating information)的复杂度的问题。其中两个最主要访问的数据源与数据库(database)和XML相关。

LINQ提供了一条更常规的途径即给.Net Framework添加一些可以应用于所有信息源(all sources of information)的具有多种用途(general-purpose)的语法查询特性(query facilities),这是比向开发语言和运行时(runtime)添加一些关系数据(relational)特性或者类似XML特性(XML-specific)更好的方式。这些语法特性就叫做.NET Language Integrated Query (LINQ)

.NET Language Integrated Query定义了一组多用途的标准查询操作符(standard query operators),可以在任何一种基于.NET平台的开发语言(.NET-based programming languagequery operators)中用一些简洁明了的语法就可以做到像访问、过滤、发送数据这样一些操作。

LONQ项目使用的可扩展的查询体系架构,可以提供同时处理XML数据和SQL数据的实现。基于XML (XLinq)的查询操作符使用一种高效率的,易使用的,并且在内存中处理的XML语法,如在主程序设计语言中使用的XPath/XQuery这样的功能。基于关系数据(Dlinq)的查询操作符即建立在综合查询语言(SQL-Based)语法基础上的语法,则直接定义在CLR类型库系统(CLR type system)中。

 

1.1         标准查询语法介绍

下面用一段C# 3.0的程序来介绍标准查询语法是如何使用的,该程序使用标准查询操作符处理一个 array 的数据内容:

 

using System;
using System.Query;
using System.Collections.Generic;

class app {
  
static void Main() {
    
string[] names = "Burke""Connor""Frank"
                       
"Everett""Albert""George"
                       
"Harris""David" }
;

    IEnumerable
<string> expr = from s in names 
                               where s.Length 
== 5
                               orderby s
                               select s.ToUpper();

    
foreach (string item in expr)
      Console.WriteLine(item);
  }

}

编译并运行该程序将输出如下结果:

BURKE
DAVID
FRANK


为了了解语言级集成查询是如何工作的,下面来剖析第一段程序:

 

IEnumerable<string> expr = from s in names 
                           where s.Length 
== 5
                           orderby s
                           select s.ToUpper();

 

局部变量 expr 使用一个查询表达式(query expression)进行初始化。通过从标准查询操作符(standard query operators)或特定领域操作符(domain-specific operators)中申请一个或更多的查询操作符(query operators),查询表达式(query expression)可以访问一个或更多信息源(information sources)。这种查询表达式使用三种标准的查询操作符,即 WhereOrderBy,和 Select

 

Visual Basic 9.0 可以很好的支持 LINQ,在 Visual Basic 9.0 中实现上面语句(statement)的程序如下:

 

Dim expr As IEnumerable(Of String= _
                   
Select s.ToUpper() _
                   From s 
in names _
                   Where s.Length 
= 5 _
                   Order By s

 

以上 C# Visual Basic 的语句展示了查询的语法(query syntax),就像 foreach 语句一样,查询语法是一些可以让你轻松的手工编写的便利速记语句。上面的语句跟下面用 C# 编写的更直观的语法在语义上是一致的:

 

IEnumerable<string> expr = names 
                           .Where(s 
=> s.Length == 5
                           .OrderBy(s 
=> s)
                           .Select(s 
=> s.ToUpper());

 

上面 WhereOrderBy Select 的操作符的参数被称作 lambda 表达式(lambda expressions),这些分段的代码很像委托(delegates,参见C++ 托管扩展中的委托)。它们允许标准查询操作符单独地定义成方法(method),并且可以用句点符号(dot notation)分隔的一列语句(strung together)的方式来使用。连接起来,这些方法就形成了一种可扩展(extensible)的查询语言的基本形式。



待续, 译者Naven 2005-10-20
posted on 2005-10-21 02:50 Javen-Studio 阅读(1527) 评论(1)  编辑 收藏 引用

评论

# LINQ,.NET综合查询语言(.NET Language Integrated Query)[TrackBack] 2005-10-21 02:54 Naven
Ping Back来自:blog.csdn.net  查看原文  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理