1 / 22

第 12 章 LINQ 基 础

第 12 章 LINQ 基 础. 第 12 章 LINQ 基 础. 本章主要内容包括: 1.1 LINQ 操作数据库原理 1.2  在项目中添加数据库映射类 1.3 LINQ 查询语法 ( 重点) 1.4 Lambda 表达式 (难点) 1.5 使用 LINQ 操作数据库 (实用). 12.1 什么是 LINQ. LINQ ( Language Integrated Query ) ,即“语言集成查询” , 架构如图. 12.2 LINQ 操作数据库原理.

poppy
Download Presentation

第 12 章 LINQ 基 础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第12章 LINQ 基 础

  2. 第12章 LINQ 基 础 • 本章主要内容包括: • 1.1LINQ操作数据库原理 • 1.2 在项目中添加数据库映射类 • 1.3 LINQ查询语法 (重点) • 1.4 Lambda表达式 (难点) • 1.5 使用LINQ操作数据库(实用)

  3. 12.1 什么是 LINQ • LINQ(Language Integrated Query) ,即“语言集成查询”,架构如图

  4. 12.2 LINQ操作数据库原理 • LINQ to SQL 是 .NET Framework 3.5的一个组件,用于将关系数据作为对象管理。 • 由LINQ to SQL构建“LINQ to SQL对象模型”,由“LINQ to SQL运行时”负责操作数据库。 • LINQ to SQL会自动将LINQ to SQL语言转换成数据库的语言与数据库进行通信。

  5. 12.3 在项目中添加数据库映射类 • 步骤如下: (1)添加 “LINQ to SQL类” 。 (2)新建一个App_Code目录 (3)进入“对象关系设计器”(O/R设计器)。 (4)从“服务器资源管理器”中的School数据中选择数据表、存储过程到O/R设计器,创建映射到数据表的对象模型,即数据库映射类(后缀名为dbml)。 • DBML是Database Mark Language的简写,是一种基于XML的数据库标记语言。

  6. 12.4 LINQ查询语法 • LINQ支持大量的查询操作符:选择、排序、筛选数据、聚合计算等关键字 • 使用上下文类DataClassesDataContext建立实例db,以便进行各项LINQ操作,代码如下: DataClassesDataContext db = new DataClassesDataContext();

  7. 1.select • 从查询的源中检索出指定对象。例:获取Movies(电影表)所有的记录: var m = from a in db.Moviesselect a; a可以理解为数据源db.Movies的一个别名 • 注:var用来定义可枚举集合类型,对象类型是匿名的。

  8. 2.where • 筛选条件 • 例:获取所有价格大于20的Movies: var m = from a in db.Movies where a.Price > 10 select a;

  9. 多个字段查询,使用SELECT创建新对象保存查询结果多个字段查询,使用SELECT创建新对象保存查询结果 var m = from a in db.Movies where a.Price > 10 select new{a.ID, a.Title,a.Price}; select new {…} 是C#3.0匿名类型。

  10. 3.from • 定义了要查询的数据源,即给数据源定义一个别名

  11. 4.orderby • 对结果集合进行排序操作:ascending、descending。 • 例:从电影表获取全部数据,根据ReleaseDate(电影发行时间)降序排序: var m = from a in db.Movies orderby a.ReleaseDate descending select a;

  12. 5.集合运算 • Count()、Sum、Min、Max和Average • 例:获取Genre(类别)的值为“战争”的电影的数量: var mCount = (from a in db.Movies where a. Genre == ‘战争’ select a).Count();

  13. 6.Take和Skip • Take类似于SQL里的TOP,返回需要的数据记录,而Skip的作用刚好相反。 • 例:获取第6~10条间的5条电影数据: var m = db.Movies .Skip(5).Take(5); Skip(5)跳过前5条数据,Take(5)获取接下来的5条数据

  14. 7.Single和First • 都是获取数据集合中的一个元素,如果集合为空都会抛出异常。 • 它们的区别:用Single的前提是查询只会返回一条记录的集合,否则会抛出异常。First获取集合的第一个元素。

  15. 例如,获取ID的值为“2”的第一条电影: var m = (from a in db.Movies where a.ID == 2 //这里换成Single作用是一样的 select a).First(); //因为ID是主键,不可能重复 • 如果改变where的条件: var m = (from a in db.Movies where a.ID >= 2 //这样返回的数据可能不止一条 select a).First(); //如果换成Single就可能出现异常

  16. 12.5 Lambda表达式 • Lambda表达式是能返回一个方法的表达式 • 普通方法由4个部分构成:返回类型、方法名、参数列表和方法主体。 • Lambda表达式只有两部分:参数列表和方法主体,返回的是一个匿名方法,返回类型则从表达式的上下文推导得到。 • Lambda表达式的书写格式如下: (参数列表) => 表达式或者语句块 其中: • =>操作符:告诉编译器这是一个Lambda表达式。 • =>的左边:参数列表。 • =>的右边:方法主体。

  17. 例: x => x * 2 //返回参数x的两倍 x => { x * 2; } //方法的主体是一个代码块 总的来说,Lambda表达式就是为了简化匿名方法。

  18. 前一节的查询例子可以使用Lambda表达式: • 获取电影表Movies所有的记录: var m = db.Movies .Select(a => a); • 获取所有价格大于10电影: var m = db.Movies.Where(a => a.Price > 10).Select(a => a);

  19. 获取根据ReleaseDate降序排序的电影表: var m = db.Movies.OrderByDescending(a=>a. ReleaseDate); • 获取Genre的值为“战争”的电影的数量: var m = db.Movies.Count(a => a.Genre == ‘战争’); • 获取ID的值为2的第一条电影: var m = db.Movies.First(a => a.ID == 2);

  20. 12.6 使用LINQ操作数据库 • LINQ对数据库的操作是完全对类的方法的调用。 • 常见操作:查询、插入、删除、修改和调用存储过程。 首先建立LINQ to Entity上下文类的实例 MovieDBContext db = new MovieDBContext();

  21. 1、查询所有的喜剧电影 var m = from u in db. Movies where u. Genre == ‘喜剧’ select u; • 2、添加一条新的电影记录 Movie m = new Movie(); m.Title = “泰囧"; m.ReleaseDate = DateTime.Parse("2012-12-12"); m.Price = 60m; m.Genre = "喜剧"; db.Movies.Add(m); //保存插入的数据到数据库 db.SaveChanges(); //提交修改到数据库

  22. 3、删除一条记录 var movie = db.Movies.Find(id); //获取一条数据 db.Movies.Remove(movie); //删除该数据 db.SaveChanges(); //提交删除到数据库 • 4、修改一条记录 Movie m = db.Movies.Where(a => a.Title == “泰囧").First();//获取第一条数据 movie.Title = “王的盛宴"; //修改Title db. SaveChanges(); //提交修改到数据库

More Related