
本文共 3557 字,大约阅读时间需要 11 分钟。
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
目标
1、LINQ概述
2、查询语法【重点】
3、方法语法【重点】
4、聚合操作与元素操作【重点】【难点】
5、数据类型转换
知识点讲解
一、LINQ概述
1.1、作用(why)
不同的数据源有不同的查询语言来查询数据,为了减轻开发人员工作量,需要提供一种通用跨数据源的查询语言,实现编写一种查询语句可以查询多种数据源。
1.2、概念(what)
Language Integrated Query。语言集成查询,微软出品的一种跨数据源和数据格式的统一查询语言
1.3、特点
(1)跨语言。linq是集成在.net平台中的一种特性,它允许使用c#、VB.NET等语言以查询数据库相同的方式在内存中查询信息。
(2)跨数据源。linq可以使用相同的编码语句来查询和转换XML文档、SQL数据库、ADO.NET数据集以及.NET集合中的数据,以及支持linq查询的任何格式的数据源。
1.4、其他
(1)只有实现了IEnumerable接口的数据源才支持linq查询。
repeater .dataSorce=objs //objs 实现IEnumerable
(2)linq分为“查询语法”和“方法语法”两种用法。“查询语法”是类似sql语句的一种查询语句。“方法语法”使用了方法结合lambda表达式。
二、LINQ查询语法
类似sql
2.1、查询步骤
第1步、获取数据源
第2步、创建查询
第3步、执行查询
2.2、查询语法
(1)基本查询
对比SQL: select *(查询的记录列) from 表名(数据源)
语法:from o in source select expr
①o为查询数据源集合中的一条记录(行)。source为数据源,如表格。expr 为要查找的记录(当前行)的字段。如果查询所有则为o,也可查询出新对象(用new {}实现)。 ②form放在开头 select 放在结尾
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; //数据源var objs = from o in numbers select o;// 查询语句,查询所有数字foreach(int n in objs){ }//执行查询 取数据的时候执行查询
(2)条件查询
对比SQL:select * from 表 where 条件
语法:from o in source where condition select expr
注:condition为查询的条件
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; //数据源
var objs = from o in numbers where o>2 select o;// 查询语句,查询大于2的数字 foreach(int n in objs){ }//执行查询注:多条件用&& 或者||
(3)排序查询
对比SQL:select * from 表 order by 排序
语法:from o in source orderby ordering select expr
注:ordering为排序字段及规则 ,如 o.id descending 或者o.id ascending
int[] numbers = new int[7] { 1, 0, 5, 3, 4, 2, 6 }; //数据源var objs = from o in numbers orderby o descending select o;//排序foreach(int n in objs){ }//执行查询
(4)分组查询
对比SQL:select * from 表 group by 字段名
语法:from o in source group expr by key
①、expr是查询的内容,key是要分组的键
②、分组查询不需要select结尾
③、分组查询得到的结果是一个二维数组
(5) 查询出新对象
where :查询某几个字段或查询的字段需要重新命名
var objs = from o in numbers select new { name="name"+o,value=o}
(6) 综合案例
对meixin的m_product表执行基本查询、条件查询(价格小于15)、排序查询(按照价格j降序序)、分组查询(按照分类分组)
var objs = from o in db.m_product select o
三、LINQ方法语法
3.1、概念(what)
通过扩展方法和lambda表达式来创建查询(通过方法调用自动生成查询语句)。lambda表达式用在基于方法的linq查询中,作为诸如where等标准查询运算符方法的参数。
3.2、作用(why)
方法语法更简洁
3.2、如何实现(how)
1、基本用法
(1)where(lambda表达式) //条件查询
//a 获取数据源 创建上下文ChijiContext db = new ChijiContext();//b方法查询var objs = db.solder.Where(o => o.rank == "大将");//c执行查询 传递到视图this.repeater1.DataSource = objs;
(2)OrderBy(lambda表达式); //升序排列查询
//注:有条件 条件放在排序前面var objs = db.solder.Where(o => o.rank == "大将").OrderBy(o=>o.id);
(3)OrderByDescending(lambda表达式); //降序排列查询
var objs = db.solder.Where(o => o.rank == "大将").OrderByDescending(o=>o.id);
(4)GroupBy(lambda表达式); //分组查询
var objs = db.solder.GroupBy(o=>o.rank);
(5)Select(o=>new{n=o.name,a=o.age}) //投影操作 查询出来创建为新的对象
使用在那些地方:只查询某些字段(比如过滤密码)
2、聚合函数
(6)Count(o=>o.age>20}) //聚合操作 或者LongCount()
(7)Max(lambda表达式列)
db.m_product.Max(o => o.price); 统计pirce这列的最大值
(8)Min(lambda表达式列)
db.m_product.Min(o => o.price); 统计pirce这列的最小值
(9)Sum(lambda表达式列)
db.m_product.Sum(o => o.price);
(10)Average(lambda表达式列)
db.m_product.Average(o => o.price);
注:所有的聚合操作只支持方法语法,不支持查询语法。
3、元素操作
(11)First()返回集合中的第一个元素或满足条件的第一个元素
案例:查询第一条产品
(12)FirstOrDefault() 返回集合中的第一个元素或满足条件的第一个元素,如果没有则返回默认值 , 防止空错误 推荐
(13)Last()返回集合中的最后一个元素或满足条件的最后一个元素
(14)LastOrDefault()返回集合中的最后一个元素或满足条件的最后一个元素,如果没有则返回默认值 EF6不支持
(15)Single()返回集合中的唯一元素或满足条件的唯一元素
(16)SingleOrDefault()返回集合中的唯一元素或满足条件的唯一元素,如果没有,则返回默认值 推荐
(17)ElementAt(index)返回集合中指定索引处的元素
(18)ElementAtOrDefault(index)返回集合中指定索引处的元素,如果索引超出范围则返回默认值 推荐 EF6不支持
4、数据类型转换
(19)ToList()将集合转换为List
(20)ToArray将集合转换为数组
(21)AsEnumerable将一个序列转换为IEnumerable集合
(22)AsQueryable将IEnumerable转换为IQueryable
(23)Cast()将集合的元素强制转换为指定类型
(24)OfType()根据值强制转换为指定类型的能力筛选值
发表评论
最新留言
关于作者
