LinQ教学讲义PPT
- 格式:ppt
- 大小:2.56 MB
- 文档页数:22
C#基础知识系列-7Linq详解前言在上一篇中简单介绍了Linq的入门级用法,这一篇尝试讲解一些更加深入的使用方法,与前一篇的结构不一样的地方是,这一篇我会先介绍Linq里的支持方法,然后以实际需求为引导,分别以方法链的形式和类SQL的形式写出来。
前置概念介绍1.Predicate<T> 谓词、断言,等价于Func<T,bool> 即返回bool的表达式2.Expression<TDelegate> 表达式树,这个类很关键,但是在这里会细说,我们会讲它的一个特殊的泛型类型:Expression<Func<T,bool>> 这个在某些数据源的查询中十分重要,它代表lambda表达式中一种特殊的表达式,即没有大括号和return 关键字的那种。
我们先准备两个类:1.Student/学生类:/// <summary>/// 学生/// </summary>public class Student{/// <summary>/// 学号/// </summary>public int StudentId { get; set; }/// <summary>/// 姓名/// </summary>public string Name { get; set; }/// <summary>/// 班级/// </summary>public string Class { get; set; }/// <summary>/// 年龄/// </summary>public int Age { get; set; }}2.Subject/科目类:3./// <summary>4./// 科目5./// </summary>6.public class Subject7.{8./// <summary>9./// 名称10./// </summary>11.public string Name { get; set; }12./// <summary>13./// 年级14./// </summary>15.public string Grade { get; set; }16./// <summary>17./// 学号18./// </summary>19.public int StudentId { get; set; }20./// <summary>21./// 成绩22./// </summary>23.public int Score { get; set; }24.}Subject 和Student通过学号字段一一关联,实际工作中数据表有可能会设计成这。
语言集成查询(LINQ)课程大纲•什么是LINQ?•查询基本操作(查询关键字)– from子句– where子句– select子句– group子句– into子句– orderby子句– join子句2什么是LINQ?•传统的查询Select FirstName,LastName from Customers Where city=‘Shanghai’Order by district1、简单的字符串。
2、没有编译时候的类型检查。
3、没有IDE编译环境的只能感知。
以上的例子只是针对SQLSERVER,针对不同的数据源,例如XML 文档、各种Web 服务等我们还要学习不同的查询方法………3什么是LINQ?•LINQ是语言集成查询(Language Integrated Query)的简称,是Visual Studio 2008 和.NET Framework 3.5 版中一项突破性的创新,它在对象领域和数据领域之间架起了一座桥梁•支持各种数据源4什么是LINQ?•所有LINQ 查询操作都由以下三个不同的操作组成– 获取数据源– 创建查询– 执行查询5数据源•数据源–在上一个示例中,由于数据源是数组,因此它隐式支持泛型IEnumerable(T)接口。
这一事实意味着该数据源可以用LINQ 进行查询。
–在foreach 语句中执行查询,而foreach 要求使用IEnumerable或Ienumerable(T)。
支持Ienumerable(T)或派生接口(如泛型Iqueryable(T)的类型称为“可查询类型”。
6创建查询•查询–查询指定要从数据源中检索的信息–查询还可以指定在返回这些信息之前如何对其进行排序、分组和结构化–查询存储在查询变量中,并用查询表达式进行初始化。
为使编写查询的工作变得更加容易,C# 引入了新的查询语法7执行查询•执行查询–延迟执行:询变量本身只是存储查询命令。
实际的查询执行会延迟到在foreach 语句中循环访问查询变量时发生。
第三讲基本的LINQ查询本讲介绍LINQ查询语法中的关键字,为以后的查询实体框架打下基础,本讲要介绍的关键字包括:查询表达式必须以 from 子句开头。
另外,查询表达式还可以包含子查询,子查询也是以 from 子句开头。
from 子句指定以下内容:●将对其运行查询或子查询的数据源。
●一个本地范围变量,表示源序列中的每个元素。
范围变量和数据源都是强类型。
from 子句中引用的数据源的类型必须为IEnumerable、IEnumerable<T>或一种派生类型(如 IQueryable<T>)。
在下面的示例中,numbers 是数据源,而 num 是范围变量。
请注意,这两个变量都是强类型,即使使用了 var 关键字也是如此。
class LowNums{static void Main(){// A simple data source.int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };// Create the query.// lowNums is an IEnumerable<int>var lowNums = from num in numbers where num < 5 select num;// Execute the query.foreach (int i in lowNums){Console.Write(i + " ");}}}// Output: 4 1 3 2 01.1范围变量如果数据源实现了 IEnumerable<T>,则编译器可以推断范围变量的类型。
例如,如果数据源的类型为 IEnumerable<Customer>,则推断出范围变量的类型为 Customer。
仅当数据源是非泛型 IEnumerable 类型(如 ArrayList)时,才必须显式指定数据源类型。
第一讲 LINQ简介1. LINQ 介绍语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中一项突破性的创新,它在对象领域和数据领域之间架起了一座桥梁。
知识点:什么是ORM(Object Relational Mapping对象关系映射)它的实质就是将关系数据(库)中的业务数据用对象的形式表示出来,并通过面向对象(Object-Oriented)的方式将这些对象组织起来,实现系统业务逻辑的过程。
对象关系映射是随着面向对象的软件开发方法发展而产生的。
面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。
对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。
内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。
因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。
为了解决这个不匹配的现象,对象关系映射技术应运而生。
让我们从O/R开始。
字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。
几乎所有的程序里面,都存在对象和关系数据库。
在业务逻辑层和用户界面层中,我们是面向对象的。
当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。
你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。
而这些代码写起来总是重复的。