使用LINQ技术操作数据库

更新时间:2023-09-30 20:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ASP.NET应用程序开发技术

学习单元5 使用LINQ技术操作数据库

在安装VS2008的时候,宣传广告中不断地显示VS2008的新特性,其中重点就有LINQ。VS作为一个全球有影响力的开发软件,自VS2008开始就把目光重点投给LINQ,这一定有它的地位和意义。

在第三学习单元和第四学习单元的学习中我们掌握了用数据源控件和ADO.NET技术操作数据库,实现了对数据库数据的编辑。虽然数据源控件以及传统的ADO.NET提供了大量的读取、查询、检索和编辑数据库中数据的方法,然而,有时这些方法显得比较繁琐。开发人员需要编程查询或操作数据库的每个步骤,如获取连接字符串、创建数据库的连接对象、打开数据的连接、执行查询或操作数据库的命令等。

LINQ引入了标准的、易于学习的查询和更新数据的模式,可以对其技术进行扩展以支持几乎任何类型的数据存储,这使得它在对象领域和数据领域之间建立了一座桥梁。图5-1给出了LINQ框架的基本架构,LINQ主要由3部分组成:LINQ to ADO.NET 、LINQ to Objects和LINQ to XML。其中LINQ to ADO.NET又分成为了两个组成部分:LINQ to SQL和LINQ to DataSet。本学习单元将通过LINQ to SQL来认识LINQ技术,其它组成部分读者可以借助其它资料进行学习。

C# VB 其它 .NET语言集成查询(LINQ) 支持LINQ的数据源 Linq to Object Linq to DataSet Linq to SQL Linq to XML LINQ to ADO.NET 对象 数据库 XML 图5-1 LINQ基本架构

5.1 任务1:使用LINQ to SQL操作数据库

5.1.1 任务场景

“588乐购网”为了向广大顾客更好地展示商品,决定在网站中添加商品展示板块。同时,为编辑这些商品信息则必须在网站的后台添加数据处理的页面。

商品展示模块的功能是通过图文并茂的方式展示商品的品名、型号、参数和图片等信

第 1页

ASP.NET应用程序开发技术

息。如图5-2所示的“588乐购网”的首页,在页面的左侧显示商品品牌导航条,右侧则显示最新上架商品的图片缩略图及其品名和价格,点击商品的图片,则按图5-3所示的界面显示商品的详细信息。

图5-2 网站首页

图5-3 商品详细信息页面

网站的后台数据管理也是一个网站必不可少的内容。在后台数据管理页面中可以进行包括用户信息、商品信息和订单信息等等内容的处理。如图5-4商品信息添加模块的页面。

第2页

ASP.NET应用程序开发技术

图5-4 添加手机页面

5.1.2 学习引导

在.NET Framework 3.5的众多新特性中,LINQ to SQL是最重要的一个,它的出现意味着自SQL诞生以来,应用程序与数据库的结合方式上最重要的一次变革。开发人员可以使用LINQ to SQL对数据库中的数据进行查询、更新、插入和删除等操作。目前,可以对Microsoft SQL Server 2000/2005(包括使用Express版)使用LINQ to SQL。其他数据库,如Oracle、DB2和Access等,目前还没有得到支持,但也许将来会得到支持。

LINQ to SQL最重要的就是为关系数据库创建一个对象模型,然后将该对象模型映射到SQL Server数据库中的相应的对象(如表、列、存储过程等)。例如,如果LINQ to SQL映射到数据库中的表,则这些LINQ to SQL类称为“实体类”。该类中的属性分别映射到数据库中的相应的列。

在理解了映射关系的基础上,接下来就是如何实现这种映射关系。这里必不可少的就是掌握LINQ查询语句,它实现了对数据库数据的查询和修改。当然,被查询的数据也可以是XML(LINQ to XML)和对象(LINQ to Objects)。

5.1.3相关知识与技术

一. LINQ查询表达式语法基础

C# 3.0在C# 1.0和 C# 2.0的基础上引入了新的语言机制,如隐型局部变量、对象初始化程序、查询表达式和Lambda表达式等。这些新的机制为LINQ提供了语法支持。

接下来,我们通过一个简单的例子来理解LINQ查询表达式语法。尽管LINQ不仅可用来访问关系数据库,而且也能访问数据集或XML等数据类型,但这里为了理解LINQ查询表达式,我们用一个SQL语句访问数据库来比较说明。

下面的SQL语句是基于NorthWind数据库用来查询没有住在Berlin的顾客的名单: SELECT c.CompanyName, c.ContactName, c.City FROM Customers c WHERE c.City != 'Berlin'

第 3页

ASP.NET应用程序开发技术

ORDER BY c.ContactName

现在来看看用LINQ表达式做同样的事情,解剖并理解清除其中的细节,有两种查询语法:查询表达式和方法查询。目前,暂时先考虑查询表达式,下面的查询表达式将从GetCustomers()返回的IEnumerable类型结果,找出那些没有居住在Berlin的顾客。

var customerNotInBerlin = from c in GetCustomers() where c.City != \ orderby c.ContactName select c;

表5-1概述了LINQ一些常用的表达式:

表5-1 LINQ查询表达式子句列表

操作符 var <变量> = from <项目> in <数据源> where select group join orderby, ascending, descending 意义 使用类型推理来赋值 从一个<数据源>中取出一个子集作为一个<项目> 从数据源中取出一个子集的约束条件 指定查询结果的类型和表现形式. 对查询结果进行分组 选择多个数据源进行关联查询 对查询结果进行排序,可以是“升序”、“降序” LINQ查询表达式必须以from子句开头,并且必须以select 或group子句结束。在第一个from子句和最后一个select或group子句之间,查询表达式可以包含一个或多个where、orderby、group、join,甚至from子句。

1. from、where和select查询子句

LINQ查询表达式必须包含from子句,而且要以from子句开头,嵌套查询其子查询表达式也必须以from开头。from子句指定查询操作的数据源和范围变量。where子句指定筛选元素的逻辑条件,一个查询表达式可以不包含where子句,也可以包含1个或多个where子句。select子句指定了查询结果的类型和表现形式。LINQ查询表达式要么以select子句结束,要么以group子句结束。

下面的实例说明了一个简单的查询操作。代码使用GetMobiles( )方法获得Mobile表的内容。之后,使用一个LINQ查询表达式(利用了from、where和select关键字)获得where筛选后的数据集作为GridView1的数据源。

private void ShowData ( ) {

var mobiles = GetMobiles(); var query=from m in mobiles where m.MbID<5 select query

第4页

ASP.NET应用程序开发技术

GridView1.DataSource= query; GridView1.DataBind();

} 注意,from子句指定的数据源的类型必须是IEnumerable(可枚举)、IEnumerable或前两者的派生类型。

在下面的例子中,我们不是简单的选择query,而是明确定义字段的名称,定义一个新的投射,指定在结果集中的对象。例如,要给MbID和MbName指定更明确的名称,以完整地描述他们的内容。

private void ShowData ( ) {

var mobiles = GetMobiles(); var query=from m in mobiles

select new {mobileid = m.MbID , mobilename = m.MbName}; GridView1.DataSource= query; GridView1.DataBind(); } 2. group子句

group子句对查询结果进行分组,并返回元素类型为IGrouping的对象序列。

下面的例子中,使用group关键字按类型组合Mobile类别数据,关键字into提供了一个临时标识符,充当group子句的结果的引用。另外,因为group操作不会导致任何结果,所以查询仍使用前面讨论的技术创建一个定制的查询投射。

private void ShowData ( ) {

var mobiles = GetMobiles (); var query = from m in mobiles

group m by m.MbTypeID into g

select new{手机类型标记=g.Key, 数量=g.Count() }; GridView1.DataSource= query; GridView1.DataBind(); }

3. orderby 子句

orderby 子句可以多查询结果进行排序。排序的方式可以是“升序”或“降序”,默认的排序方式为“升序”。

private void ShowData ( ) {

第 5页

本文来源:https://www.bwwdw.com/article/uk2d.html

Top