Sunday, May 06, 2007

LINQ,语言层面的O/R映射技术,用面向对象操作数据库

LINQ,语言层面的O/R映射技术,用面向对象操作数据库


(原文:http://blogs.msdn.com/danielfe/archive/category/10786.aspx


1 LINQ项目介绍


2005913Anders Hejlsberg PDC2005上首次展示了LINQ项目的第一个Demo。(LINQ Project Home: http://msdn.microsoft.com/netframework/future/linq/



你可能会问 LINQ 究竟是什么?


LINQ,全名叫 Language INtegrated Query,它把查询(Query)和设置(set operations)等操作封装起来,就像.NET语言里如 C# VB 最先实现的 SQL statements 查询语句一样。


Query 表达式,也就是你所熟悉并热衷于使用的 SQL 语法如“from”、“where”和“select”等以及其他 C# VB 里最先实现的查询语法。不仅如此,Query 表达式还可用于跨应用领域查询数据。在下面的例子中,示范如何查询对象数据(Objects),就如同查询数据库(Database)中的数据一样容易。



LINQ编写的代码是什么样子呢?


下面的例子示范查询一个string数据列表(list),并返回长度为 5 string 数据。

using System;
using System.Query;
using Danielfe;

class Program
{
static void Main(string[] args)
{
string[] aBunchOfWords = {"One","Two", "Hello",
"World", "Four", "Five"};

var result
=
from s
in aBunchOfWords // query the string array
where s.Length == 5 // for all words with length = 5
select s; // and return the string

//PrintToConsole is an Extension method that prints the value
result.Print();
}
}


程序将输出如下结果:


Hello
World


LINQ 的奇妙之处在于你可以用它来查询任何数据。下面的例子示范从 SQL Server 2005 中查询所有 Title 长度为 5 Customer 数据:



using System;
using System.Query;
using Danielfe;
using System.Data.DLinq; //DLinq is LINQ for Databases
using nwind; //Custom namespace that is tool generated

class Program
{
static void Main(string[] args)
{
Northwind db
= new Northwind("Data Source=(local);Initial Catalog=Northwind;Integrated Security=True");
Table
<Customers> allCustomers = db.GetTable<Customers>();

var result
=
from c
in allCustomers
where c.ContactTitle.Length
== 5
select c.ContactName;

result.Print();
}
}




Customers 类是一个可以让你的程序访问的对应于数据库表(table 结构的自动生成的类。上面代码的前两行是建立一个数据库连接并获取 Customers 表的数据,下一行是查询所有 ContactTitle 的字符串长度为 5 Customers 并返回其 ContactName 数据,再输出到屏幕。



简单的说,LINQ 可以通过一个统一的标准的方式(类似 SQL 查询语句)很轻松的访问任何一种数据源。




待续, 译者Naven 2005-10-20


No comments: