第4章 Linq查询
发布日期:2021-05-07 10:54:46 浏览次数:20 分类:技术文章

本文共 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()根据值强制转换为指定类型的能力筛选值

上一篇:CodeCombat代码全记录(Python学习利器)--安息之云山峰(第四章)代码9
下一篇:skyfans之每天一个Liunx命令系列之四十九:awk之3

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年03月25日 13时48分18秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章