ASP.NET程序设计案例教程工业和信息化普通高等教育“十二五”规划教材立项项目教学课件作者杨树林胡洁萍ASP.NET8章节

上传人:E**** 文档编号:90505700 上传时间:2019-06-12 格式:PPT 页数:41 大小:346KB
返回 下载 相关 举报
ASP.NET程序设计案例教程工业和信息化普通高等教育“十二五”规划教材立项项目教学课件作者杨树林胡洁萍ASP.NET8章节_第1页
第1页 / 共41页
ASP.NET程序设计案例教程工业和信息化普通高等教育“十二五”规划教材立项项目教学课件作者杨树林胡洁萍ASP.NET8章节_第2页
第2页 / 共41页
ASP.NET程序设计案例教程工业和信息化普通高等教育“十二五”规划教材立项项目教学课件作者杨树林胡洁萍ASP.NET8章节_第3页
第3页 / 共41页
ASP.NET程序设计案例教程工业和信息化普通高等教育“十二五”规划教材立项项目教学课件作者杨树林胡洁萍ASP.NET8章节_第4页
第4页 / 共41页
ASP.NET程序设计案例教程工业和信息化普通高等教育“十二五”规划教材立项项目教学课件作者杨树林胡洁萍ASP.NET8章节_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《ASP.NET程序设计案例教程工业和信息化普通高等教育“十二五”规划教材立项项目教学课件作者杨树林胡洁萍ASP.NET8章节》由会员分享,可在线阅读,更多相关《ASP.NET程序设计案例教程工业和信息化普通高等教育“十二五”规划教材立项项目教学课件作者杨树林胡洁萍ASP.NET8章节(41页珍藏版)》请在金锄头文库上搜索。

1、第8章 LINQ数据库技术,杨树林 北京印刷学院,本章要点,LINQ基本查询操作。 LINQ查询表达式。 使用LINQ查询和更新数据库。 利用LINQ技术实现网站的数据访问层。 利用LINQ操作XML。,8.1 LINQ概述,LINQ提供一种跨各种数据源和数据格式使用数据的一致模型,在LINQ查询中,始终会用到对象。可以使用相同的基本编码模式来查询和转换XML文档、SQL 数据库、ADO.NET数据集、.NET集合中的数据以及对其有LINQ提供程序可用的任何其他格式的数据。,8.1.1 什么是LINQ,LINQ是一种基于统一化的集成查询技术,最初在代号为Orcas的Visual Studio

2、2008中发布,它提供给程序员一个统一的编程概念和语法,程序员不需要关心将要访问的是关系数据库、XML数据或是远程的对象,它都采用同样的访问方式。 LINQ包含一系列技术,包括LINQ、DLINQ、XLINQ等。其中LINQ到对象是对内存进行操作LINQ到SQL是对数据库进行操作,LINQ到XML是对XML数据进行操作。图8-1描述了LINQ技术的体系结构。 LINQ的目的是提供一种统一且对等的方式,让程序员在广义的数据上操作“数据”。通过使用LINQ,能够在编程语言内直接创建查询表达式的实体。这些查询表达式是是基于许多查询运算符的,而且是有意设计成类似SQL表达式的样子。LINQ允许查询表达

3、式以统一的方式来操作任何实现了IEnumerable接口的对象、关系数据库或XML文档。,8.1.2 基本的查询操作,LINQ查询操作由三个部分组成:获取数据源,定义查询,执行查询。 / 获取数据源,这里为了简单起见,给出一个整型数组 int scores = new int 97, 92, 81, 60 ; / 定义查询 IEnumerable scoreQuery = from score in scores where score 80 select score; / 执行查询 foreach (int i in scoreQuery) Console.Write(i + “ “); ,

4、8.1.3 LINQ查询表达式,查询表达式是用查询语法表示的查询,由一组用类似于SQL或XQuery的声明性语法编写的子句组成。每个子句又包含一个或多个C#表达式,而这些表达式本身又可能是查询表达式或包含查询表达式。 查询表达式必须以from子句开头,并且必须以select或group子句结尾。在第一个from 子句和最后一个select或group子句之间,查询表达式可以包含一个或多个下列可选子句:where、orderby、join、let,甚至附加的from子句。还可以使用into关键字使join或group 子句的结果能够充当同一查询表达式中附加查询子句的源。,1. 查询变量 在LIN

5、Q中,查询变量是任何存储查询而不是查询结果的变量。更具体地说,查询变量始终是一个可枚举的类型,当在foreach语句中或对其IEnumerator.MoveNext方法的直接调用中循环访问它时,它将产生一个元素序列。,2. from子句 在LINQ查询中,最先使用from子句的目的是引入数据源(customers)和范围变量 (cust)。例如,customers为数据源,cust为选择范围。 var queryAllCustomers = from cust in customers select cust;,3. where子句 where子句用作筛选器。筛选器指定从源序列中排除哪些元素。

6、在下面的示例中,只返回那些地址位于北京的客户。 var queryLondonCustomers = from cust in customers where cust.City = “北京“ select cust;,4. orderby子句 orderby子句将使返回的序列中的元素按照被排序的类型的默认比较器进行排序。例如,下面的查询可以扩展为按Name属性对结果进行排序。因为Name是一个字符串,所以默认比较器执行从A到Z的字母排序。 var queryLondonCustomers3 = from cust in customers where cust.City = “北京“ ord

7、erby cust.Name ascending select cust;,5. group子句 使用group子句,可以按指定的键对结果进行分组。例如,下面的示例按 City 分组: / queryCustomersByCity的类型为IEnumerable var queryCustomersByCity = from cust in customers group cust by cust.City; / customerGroup的类型为IGrouping foreach (var customerGroup in queryCustomersByCity) Console.Write

8、Line(customerGroup.Key); foreach (Customer customer in customerGroup) Console.WriteLine(“ 0“, customer.Name); ,6. select子句 使用select子句可产生所有其他类型的序列。简单的select子句只是产生与数据源中包含的对象具有相同类型的对象的序列。下面的示例中,数据源包含Country对象。orderby 子句只是将元素重新排序,而select子句则产生重新排序的Country对象的序列。 IEnumerable sortedQuery = from country in c

9、ountries orderby country.Area select country;,7. join子句 使用join子句可以根据每个元素中指定键之间的相等比较,对一个数据源中的元素与另外一个数据源中的元素进行关联。在LINQ中,联接操作是针对其元素具有不同类型的对象序列执行的。在联接两个序列之后,必须使用select或group语句指定要存储到输出序列中的元素。还可以使用匿名类型将每组关联元素中的属性组合为输出序列的新类型。下面的示例对其Category属性与categories字符串数组中的某个类别相匹配的prod对象进行关联。其Category不与categories中的任何字符串

10、匹配的产品会被筛选掉。select语句投影了一个新类型,其属性取自cat和prod。 var categoryQuery = from cat in categories join prod in products on cat.id equals prod.CategoryID select new Category = cat, Name = prod.Name ;,8. let子句 使用let子句可以将表达式(如方法调用)的结果存储到新的范围变量中。在下面的示例中,范围变量s 存储了Split返回的字符串数组的第一个元素。 string names = “Svetlana Omelche

11、nko“, “Claire ODonnell“, “Sven Mortensen“, “Cesar Garcia“ ; IEnumerable queryFirstNames = from name in names let firstName = name.Split(new char )0 select firstName; foreach (string s in queryFirstNames) Console.Write(s + “ “);,8.1.4 使用LINQ进行数据转换,LINQ不仅可用于检索数据,而是还是一个功能强大的数据转换工具。通过使用LINQ查询,可以将源序列用作输入

12、,并采用多种方式修改它以创建新输出序列。可以通过排序和分组来修改序列本身,而不必修改元素本身。但是,LINQ查询最强大的功能可能在于它能够创建新类型。这一功能在select子句中实现。例如,可以执行下列任务: 将多个输入序列合并到具有新类型的单个输出序列中。 创建其元素只包含源序列中的各个元素的一个或几个属性的输出序列。 创建其元素包含对源数据执行的操作结果的输出序列。 创建不同格式的输出序列。例如,您可以将SQL行或文本文件的数据转换为 XML。 下面通过几个例子来展示如何使用LINQ进行数据类型转换,8.2 LINQ到ADO.NET,LINQ to ADO.NET主要用来操作关系数据。包括

13、LINQ to DataSet和LINQ to SQL。使用LINQ to DataSet可以对DataSet执行丰富而优化的查询,而使用LINQ to SQL可以直接查询SQL Server数据库。 LINQ to SQL的使用主要可以分为以下两大步骤: 创建对象模型。要实现LINQ to SQL,首先必须根据现有关系数据库的元数据创建对象模型。对象模型就是按照开发人员所用的编程语言来表示的数据库,有了此对象模型,才能创建查询语句以操作数据库。 创建了对象模型后,就可以在该模型中描述信息请求和操作数据了。,8.2.1 创建对象模型,对象模型是关系数据库在编程语言中表示的数据模型,对对象模型的

14、操作就是对关系数据库的作。LINQ to SQL对象模型中最基本的元素有实体、类成员、关联和方法。 对象模型(实体类、关联和 DataContext 方法)在LINQ to SQL文件(.dbml文件)中定义,在对象关系设计器(O/R 设计器)中创建和编辑。通过使用“添加新项”对话框并选择“LINQ to SQL 类”模板,可以向项目中添加 LINQ to SQL 文件。 这里以书城网站为例,说明创建数据模型的步骤。,8.2.2 查询和更改数据库,1. 查询数据 LINQ to SQL中的查询与LINQ中的查询使用相同的语法。唯一的差异是LINQ to SQL查询中引用的对象映射到数据库中的元

15、素。LINQ to SQL将您编写的查询转换成等效的SQL查询,然后将它们发送至服务器进行处理。 查询一条记录 使用Single方法查询一条记录。例如: BsBook book=(from book in dc.BsBook where book.ID = id select book).Single();,查询多条记录 使用ToList方法查询多条记录。例如: Ilist list = (from book in dc.BsBook where catID != 0 ? book.CatID = catID : true ,数据排序与分页 使用orderby子句进行数据排序,使用Skip和T

16、ake方法进行数据分页。例如: IList list = (from book in dc.BsBook where catID != 0 ? book.CatID = catID : true ,2. 插入数据 使用InsertOnSubmit插入数据,再使用SubmitChanges方法提交到数据库。例如: dc.BsBook.InsertOnSubmit(book); dc.SubmitChanges();,3. 修改数据 先调用Attach方法,附带有更新的记录到数据集合,然后调用Refresh方法,定义如何处理附带的记录,再调用SubmitChanges方法传入ConflictMode.ContinueOnConflict 参数,决定如何更新数据库。例如: dc.BsBook.Attach(book);/附加实体的原始值 dc.Refresh(RefreshMode.KeepCurrentValues, book); dc.SubmitChanges(ConflictMode.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号