数据库LINQ概述

 时间:2010-12-21 22:03:22 贡献者:chenhanghai333

导读:Ch37 LINQ 概述对于长期发展的面向对象编程模型而言,其发展基本处于一个比较稳定的阶段,可是面向对象的编 程模型并没有解决数据的访问和整合的复杂问题。对于数据库的访问和 XML 的访

linq to sql更新数据库操作
linq to sql更新数据库操作

Ch37 LINQ 概述对于长期发展的面向对象编程模型而言,其发展基本处于一个比较稳定的阶段,可是面向对象的编 程模型并没有解决数据的访问和整合的复杂问题。

对于数据库的访问和 XML 的访问,面向对象方法论 无法从根本意义上解决其复杂度和难度,而 LINQ 提供了一种更好的解决方案。

一、什么是 LINQ任何技术都不可能凭空搭建起来,为了解决工业生产生中某个实际问题,当现有的技术已经无法很 好的完成工业的要求,就会促发新技术的诞生。

LINQ 就是为了解决复杂的数据访问和整合而出现的一 种新技术。

1、LINQ 起源 、从传统的意义上来说,面向过程的编程模型在数据访问和整合的能力上有一定的限度。

因为面向过 程的编程方法不能很好的描述一个事务,必须通过不同函数之间的调用来描述一个现有的对象,而且面 向过程的编程方法在代码复用性上比较低,所以当面向过程的编程语言需要对数据库进行访问时,就需 要编写大量的额外代码。

虽然面向过程的编程模型可以通过良好的函数引用和编码提高复用性,但是并 没有解决面向过程编程模型中对数据的访问和整合的复杂度。

随着计算机和编程模型的发展,人们发现了另一个更好的编程模型,这就是现在最常用的面向对象 编程模型。

相比面向过程的编程模型而言,面向对象的编程模型能够更好的描述一个事务,事务能够通 过面向对象中的属性、字段和方法很好的模拟实际的事务,而面向对象编程模型中的派生、继承等特性 同样能够极大的提高代码的复用性,提升开发效率。

但是面向对象的编程模型同样没有解决复杂的数据库访问和数据整合,开发人员还是需要通过繁琐 的手段进行数据库的访问和数据整合。

在.NET 3.0 框架或更早,LINQ 就已经被提及,LINQ 是一种能够 快速对大部分数据源进行访问和数据整合的一种技术,LINQ 解决了复杂的数据应用中开发人员需要面 对和解决的问题。

虽然面向对象的数据库已经在几年前就被提及并且各大 IT 公司投入了对面向对象的数据库的研发, 但是传统的关系型数据库在当今还是应用最为广泛的。

关系型数据库中将数据整合和呈现成为一张张的 表的形式, 开发人员和数据库管理人员能够通过 SQL 管理工具提供的 SQL 语句进行数据的查询和整理。

但是在开发过程中,开发人员不能够像使用 SQL 语句一样对数据集进行查询和处理。

任何数据库中的 数据都会以一种数据集的形式反馈给用户,这种数据集的形式可以反映成为数学中的集合的概念,其实 在数据库早期的发展中,数据是以集合的概念呈现的,而随着数据库的发展,集合的概念依旧是数据库 最基本的概念。

正式因为如此,开发人员不能够方便的是从一个集合中查询数据,这里不仅仅是一个数据库,还包 括其他能够以数据库形式存在的文件,例如 ACCESS、TXT 等,当在开发中需要使用到多个数据库或者 数据描述形式的文件时,更多的情况是将这些数据填充到数据集中并通过遍历来访问数据,这样却造成 了更多的数据访问问题和麻烦。

LINQ 能够很方便的进行数据的查询,使用 LINQ 对数据集进行查询的形式很像使用 SQL 语句对数 据库中的表进行查询,而与之不同的是,LINQ 能够面向更多的对象,这些对象包括数组、集合以及数 据库,LINQ 对数组的查询示例代码如下所示。

static void Main(string[] args) { string[] str = { "你好","今天的","天气真不错","生活很阳光"};//创建数组

var s = from n in str select n; foreach (var n in s) { Console.WriteLine(n.ToString()); } Console.ReadKey(); }//编写查询字串 //遍历查询对象 //输出对象值 //等待用户按键上述代码对数组 str 进行了查询, 这种方式很像 SQL 语句。

的确 LINQ 的查询方式和 SQL 语句很像, 其语法和基本内容都没有什么太大的差别,但是 LINQ 提供了更好的查询的解决方案。

LINQ 能够查询 更多对象(例如上述代码中的数组)而无法使用 SQL 语句进行查询。

另外,LINQ 查询语句还能够使用 WHERE 等关键字进行查询,示例代码如下所示。

static void Main(string[] args) { string[] str = { "你好","今天的","天气真不错","生活很阳光"}; var s = from n in str where n.Length > 3 select n; foreach (var n in s) { Console.WriteLine(n.ToString()); } Console.ReadKey(); } //输出对象值 //等待用户按键//创建数组 //使用条件查询 //遍历查询对象上述代码修改了 LINQ 查询语句,为 LINQ 查询语句增加了条件查询,该条件的意义为查询字符串 长度大于 3 的字符串,运行后如图所示。

LINQ 查询语句从上图可以看出,能够使用类似于 SQL 语句的形式进行数据集的查询,很大程度上方便了开发人 员对于数据库中数据的访问和整理。

LINQ 可以使用条件语句进行筛选,并且能够使用.NET 提供的语法 进行判断,这样就简化了开发人员对于数据集中的数据的筛选。

有关 LINQ 的语句,会在后面的章节中 详细的讲解。

2、LINQ 构架 、在.NET 3.5 中,LINQ(Language Integrated Query)已经成为了编程语言的一部分,开发人员已经 能够使用 Visual Studio 2008 创建使用 LINQ 的应用程序。

LINQ 对基于.NET 平台的编程语言提供了标准 的查询操作。

在.NET 3.5 中,LINQ 的基本构架如图所示。

2

LINQ 基本构架如上图所示,LINQ 能够对不同的对象进行查询。

在.NET 3.5 中,微软提供了不同的命名空间以支 持不同的数据库配合 LINQ 进行数据查询。

在 LINQ 框架中,处于最上方的就是 LINQ 应用程序,LINQ 应用程序基于.NET 框架而存在的,LINQ 能够支持 C#、VB 等.NET 平台下的宿主语言进行 LINQ 查询。

在 LINQ 框架中, 还包括 Linq Enabled ADO.NET 层, 该层提供了 LINQ 查询操作并能够提供数据访问和 整合功能。

LINQ 包括五个部分,这五个部分分别是 LINQ to Objects、LINQ to DataSet、LINQ to SQL、LINQ to Entities、 LINQ to XML, 在.NET 开发中最常用的是 LINQ to SQL 和 LINQ to XML, 本书也详细介绍 LINQ 的这两个部分。

LINQ to SQL 提供了对 SQL Server 中数据库的访问和整合功能, 同时能够以对象的形式进行数据库 管理,前面已经提到,现在的数据库依旧以关系型数据库为主,在面向对象开发过程中,很难通过对象 的方法描述数据库,而 LINQ 提供了通过对象的形式对数据库进行描述。

LINQ to XML 提供了对 XML 中数据集的访问和整合功能,LINQ to XML 使用 System.Xml.Linq 命名控件,为 XML 操作提供了高效 易用的方法。

3、LINQ 与 Visual Studio 2008 新特性 、讲到 LINQ 就不得不讲解 Visual Studio 2008 的新特性,LINQ 作为 Visual Studio 2008 中的一部分, Visual Studio 2008 为 LINQ 提供很好的编程环境,LINQ 也使用到了 C#编程语言中的很多特性,以提高 开发人员的开发效率。

Visual Studio 2008 重定向: 使用 Visual Studio 2008 与 Visual Studio 2005 不同的是, Visual Studio 2008 支持多个版本.NET 框架的共存, Visual Studio 2008 中可以选择基于.NET 2.0 或.NET 3.X 在 版本的框架来开发不同的应用程序,当选择不同的应用程序基础框架时,Visual Studio 2008 能 够智能的提供不同的命名空间。

Visual Studio 2008 AJAX:在 ASP.NET 2.0 开发中,需要使用 ASP.NET AJAX 1.0 作为 AJAX 开 发必备的工具,在 Visual Studio 2008 中已经集成了对 AJAX 的支持,创建 ASP.NET 3.5 应用程3

序已经能够非常方便的使用 AJAX 功能。

Visual Studio 2008 可视化操作:在 Visual Studio 2008 中,微软提供了可视化操作,开发人员能 够选择不同的视图进行页面分离形式的开发,在 Visual Studio 2008 中开发人员可以选择视图, 拆分,代码三种视图进行不同的开发体验。

Visual Studio 2008 集成 LINQ: 这是 Visual Studio 2008 中比较值得期待的功能, Visual Studio 2008 将 LINQ 作为编程语言中的一部分,为开发人员提供了 LINQ 开发的原生环境。

在 LINQ 与 Visual Studio 2008 中, 开发人员最为期待的新特性还是 Visual Studio 2008 对 LINQ 的原 生支持,使用 LINQ 能够快速的进行数据库的访问和整合,这样在一定的意义上降低了开发难度,LINQ 在.NET Framework 3.5 中的位置如下图所示。

.NET 框架中的 LINQ正如上图所示,.NET 2.0 后面几个版本的框架都是基于.NET Framework 2.0 而存在的,在.NET Framework 3.0 中,微软已经增加了 WPF,WCF,WF 等新特性以提供快速的面向服务的开发和完善的 用户体验解决方案。

而 LINQ 是作为.NET Framework 3.5 存在于.NET Framework 中的,这也就是说只有 在.NET Framework 3.5 框架中才能够使用 LINQ 技术。

由于.NET Framework 3.5 版本的框架基于.NET Framework 3.0 版本, 开发人员可以使用 LINQ 特性进行分布式开发和面向服务的开发, 这样就能够更近 一步的提高代码的复用性和安全性。

应用程序(可删除) 二、LINQ 与 Web 应用程序(可删除)在 ASP.NET 应用程序开发中,常常需要涉及到数据的显式和整合,使用 ASP.NET 2.0 中提供的控 件能够编写用户控件,开发人员还能够选择开发自定义控件进行数据显示和整合,但是在数据显示和整 合过程中, 开发人员往往需要大量的连接、 关闭连接等操作, 而且传统的方法也破坏了面向对象的特性, 使用 LINQ 能够方便的使用面向对象的方法进行数据库操作。

1、创建使用 LINQ 的 Web 应用程序 、创建 LINQ 的 Web 应用程序非常的容易,只要创建 Web 应用程序时选择的平台是基于.NET Framework 3.5 的就能够创建使用 LINQ 的 Web 应用程序,如下图所示。

4

选择.NET Framework 3.5当创建一个基于系统.NET Framework 3.5 的应用程序,系统就能够自动为应用程序创建 LINQ 所需 要的命名空间,示例代码如下所示。

using System.Xml.Linq; using System.Linq; //使用 LINQ 命名空间 //使用 LINQ 命名空间上述命名空间提供了应用程序中使用 LINQ 所需要的基础类和枚举,在 ASP.NET 应用程序中就能 够使用 LINQ 查询语句进行查询,示例代码如下所示。

protected void Page_Load(object sender, EventArgs e) { string[] str = { "我爱 C#", "我喜欢 C#", "我做 C#开发", "基于.NET 平台", "LINQ 应用" }; //数据集 var s = from n in str where n.Contains("C#") select n; //执行 LINQ 查询 foreach (var t in s) //遍历对象 { Response.Write(t.ToString() + "
"); } } //输出查询结果上述代码在 ASP.NET 页面中执行了一段 LINQ 查询,查询字符串中包含“C#”的字符串,运行后 如图所示。

ASP.NET 执行 LINQ 查询在 ASP.NET 中能够使用 LINQ 进行数据集的查询, Visual Studio 2008 已经将 LINQ 整合成为编程语5

言中的一部分,基于.NET Framework 3.5 的应用程序都可以使用 LINQ 特性进行数据访问和整合。

2、基本的 LINQ 数据查询 、使用 LINQ 能够对数据集进行查询, ASP.NET 中, 在 可以创建一个新的 LINQ 数据库进行数据集查 询,右击现有项目,单击【添加新项】选项,选择【LINQ to SQL 类】选项,如图所示。

创建 LINQ to SQL 类创建一个 LINQ to SQL 类,能够映射一个数据库,实现数据对象的创建,如图 20-7 所示。

创建一 个 LINQ to SQL 类后, 可以直接在服务资源管理器中拖动相应的表到 LINQ to SQL 类文件中, 如图所示。

服务资源管理器拖动一个表开发人员能够直接将服务资源管理器中的表拖动到 LINQ to SQL 类中, LINQ to SQL 类文件中就 在 会呈现一个表的视图。

在视图中,开发人员能够在视图中添加属性和关联,并且能够在 LINQ to SQL 类 文件中可以设置多个表,进行可视化关联操作。

创建一个 LINQ to SQL 类文件后,LINQ to SQL 类就将数据进行对象化,这里的对象化就是以面向 对象的思想针对一个数据集建立一个相应的类, 开发人员能够使用 LINQ to SQL 创建的类进行数据库查 询和整合操作,示例代码如下所示。

protected void Page_Load(object sender, EventArgs e) { MyDataDataContext data = new MyDataDataContext();命名空间? var s = from n in data.mynews where n.ID==1 select n; foreach (var t in s) 6//使用 LINQ 类 //执行查询 //遍历对象

{ Response.Write(t.TITLE.ToString() + "
"); } } //输出对象上述创建了一个 MyData.dbml 的 LINQ to SQL 文件, 开发人员能够直接使用该类的对象提供数据操 作。

上述代码使用了 LINQ to SQL 文件提供的类进行数据查询,LINQ 查询语句示例代码如下所示。

var s = from n in data.mynews where n.ID==1 select n; //编写查询语句上述代码使用了 LINQ 查询语句查询了一个 mynews 表中 ID 为 1 的行,使用 LINQ to SQL 文件提 供的对象能够快速的进行数据集中对象的操作。

创建一个 MyData.dbml 的 LINQ to SQL 文件,其中 MyDataDataContext 为类的名称,该类提供 LINQ to SQL 操作方法,示例代码如下所示。

MyDataDataContext data = new MyDataDataContext(); //使用 LINQ 类上述代码使用了 LINQ to SQL 文件提供的类创建了一个对象 data,data 对象包含数据中表的集合, 通过“.”操作符可以选择相应的表,示例代码如下所示。

data.mynews //选择相应表使用 LINQ 查询后运行结果如图所示。

LINQ 执行数据库查询使用 LINQ 技术能够方便的进行数据库查询和整合操作,LINQ 不仅能够实现类似 SQL 语句的查询 操作,还能够支持.NET 编程方法进行数据查询条件语句的编写。

使用 LINQ 技术进行数据查询的顺序 如下所示: 创建 LINQ to SQL 文件:创建一个 LINQ to SQL 类文件进行数据集封装。

拖动数据表:将数据表拖动到 LINQ to SQL 类文件中,可以进行数据表的可视化操作。

使用 LINQ to SQL 类文件:使用 LINQ to SQL 类文件提供的数据集的封装进行数据操作。

使用 LINQ to SQL 类文件能够极快的创建一个 LINQ 到 SQL 数据库的映射并进行数据集对象的封 装,开发人员能够使用面向对象的方法进行数据集操作并提供快速开发的解决方案。

3、LINQ 相关的命名空间 LINQ 开发为开发人员提供了便利,可以让开发人员以统一的方式对 IEnumerable接口的对象、 数据库、数据集以及 XML 文档进行访问。

从整体上来说,LINQ 是这一系列访问技术的统称,对于不 同的数据库和对象都有自己的 LINQ 名称,例如 LINQ to SQL、LINQ to Object 等等。

当使用 LINQ 操作 不同的对象时,可能使用不同的命名空间。

常用的命名空间如下所示。

System.Data.Linq: 该命名空间包含支持与 LINQ to SQL 应用程序中的关系数据库进行交互的 类。

System.Data.Linq.Mapping:该命名空间包含用于生成表示关系数据库的结构和内容的 LINQ to7

SQL 对象模型的类。

System.Data.Linq.SqlClient:该命名空间包含与 SQL Server 进行通信的提供程序类,以及包含 查询帮助器方法的类。

System.Linq:该命名空间提供支持使用语言集成查询 (LINQ)进行查询的类和接口。

System.Linq.Expression:该命名空间包含一些类、接口和枚举,它们使语言级别的代码表达式 能够表示为表达式树形式的对象。

System.Xml.Linq:包含 LINQ to XML 的类,LINQ to XML 是内存中的 XML 编程接口。

LINQ 中常用的命名空间为开发人员提供 LINQ 到数据库和对象的简单的解决方案,开发人员能够 通过这些命名空间提供的类进行数据查询和整理,这些命名空间统一了相应的对象的查询方法,如数据 集和数据库都可以使用类似的 LINQ 语句进行查询操作。

8

 
 

微信扫一扫 送福利