1、语言集成查询语言集成查询(LINQ)2课程大纲什么是LINQ?查询基本操作(查询关键字) from子句 wher子句 slct子句 group子句 int子句 orderby子句 jin子句3什么是LINQ?传统的查询Selct FirstName,LastName from Customers Whre city=ShnghiOrdr by district1、简单的字符串。2、没有编译时候的类型检查。3、没有IDE编译环境的只能感知。以上的例子只是针对SQL SERVER,针对不同的数据源,例如XML 文档、各种Web 服务等我们还要学习不同的查询方法4什么是LINQ?LINQ是语言集成查
2、询(Language Integrated Query)的简称,是Visual Studio 208 和.NET Frmwork 3.5 版中一项突破性的创新,它在对象领域和数据领域之间架起了一座桥梁支持各种数据源5什么是LINQ?所有LINQ 查询操作都由以下三个不同的操作组成 获取数据源 创建查询 执行查询6数据源数据源在上一个示例中,由于数据源是数组,因此它隐式支持泛型IEnumerable(T)接口。这一事实意味着该数据源可以用LINQ 进行查询。在foreach 语句中执行查询,而foreach 要求使用IEnumerable或Ienumerable(T)。支持Ienume(T)或派
3、生接口(如泛型Iqueryabl)的类型称为“可查询类型”。7创建查询查询查询指定要从数据源中检索的信息查询还可以指定在返回这些信息之前如何对其进行排序、分组和结构化查询存储在查询变量中,并用查询表达式进行初始化。为使编写查询的工作变得更加容易,C# 引入了新的查询语法8执行查询执行查询延迟执行:询变量本身只是存储查询命令。实际的查询执行会延迟到在foreach 语句中循环访问查询变量时发生。强制立即执行执行聚合函数(Count、Max、Average、First)调用ToList(TSrce) 或Tory(TSource) 方法缓存结果9延时执行10查询关键字复合from子句 在某些情况下,
4、源序列中的每个元素本身可能是序列,也可能包含序列 用于访问单个数据源中的内部集合使用多个from 子句执行联接 可以包含多个可从独立数据源生成补充查询的from 子句1查询关键字wher子句将一个布尔条件(“谓词”)应用于每个源元素(由范围变量引用),并返回满足指定条件的元素一个查询表达式可以包含多个where 子句where 子句是一种筛选机制。除了不能是第一个或最后一个子句外,它几乎可以放在查询表达式中的任何位置。where 子句可以出现在group 子句的前面或后面,具体情况取决于是必须在对源元素进行分组之前还是之后来筛选源元素12如果指定的谓词对于数据源中的元素无效,则会发生编译时错误
5、。这是LINQ 提供的强类型检查的一个优点编译时,where 关键字会被转换为对Where 标准查询运算符方法的调用13排序在查询表达式中,orderby 子句可使返回的序列或子序列(组)按升序或降序排序。可以指定多个键,以便执行一个或多个次要排序操作默认排序顺序为升序编译时,orderby 子句被转换为对OrderBy 方法的调用。子句中的多个键转换为ThenBy 方法调用。14分组group 子句返回一个IGrouping(TKey, Telement) 对象序列编译时,group 子句被转换为对GroupBy 方法的调用。1516联接使用join 子句可以将来自不同源序列并且在对象模型中没有直接关系的元素相关联 唯一的要求是每个源中的元素需要共享某个可以进行比较以判断是否相等的值 join 子句使用特殊的equals 关键字比较指定的键是否相等三种常见的联接类型内部联接分组联接 左外部联接1718左外部联接在左外部联接中,将返回左侧源序列中的所有元素,即使它们在右侧序列中没有匹配的元素也是如此。若要在LINQ 中执行左外部联接,请将DefaultIfEmpty 方法与分组联接结合起来,以指定要在某个左侧元素不具有匹配元素时产生的默认右侧元素。可以使用null 作为任何引用类型的默认值,也可以指定用户定义的默认类型