C#Linq的10个练习
1.LINQ的两种语法
2.一些有用的LINQ扩展方法
| 扩展方法 | 描述 | 延期 |
| All | 如果源数据中的所有条目都与谓词匹配,则返回true | 否 |
| Any | 如果源数据中至少有一个条目与谓词匹配,则返回true |
否 |
| Contains | 如果数据源含有指定的条目或值,则返回true | 否 |
| Count | 返回数据源的条目数 | 否 |
| First | 返回数据源的第一个条目 | 否 |
| FirstOrDefault | 返回数据源的第一个条目或无条目时,返回默认值 | 否 |
| Last | 返回数据源的最后一个条目 | 否 |
| LastOrDefault | 返回数据源的最后条目或无条目时,返回默认值 | 否 |
| Max Min |
返回由lambda表达式表示的最大值或最小值 | 否 |
| OrderBy OrderByDescending |
基于lambda表达式返回的值对源数据进行排序 | 是 |
| Reverse | 反转数据源中数据项的顺序 | 是 |
| Select | 设计一个查询结果 | 是 |
| SelectMany | 把每个数据项投射到一个条目序列中,然后把所有这些结果序列连接成一个序列 | 是 |
| Single | 返回数据源的第一个条目或有多个匹配时,抛出一个异常 | 否 |
| SingleOrDefault | 返回数据源的第一个条目或无条目时,返回默认值;或者有多个匹配条目时,抛出一个异常 | 否 |
| Skip SkipWhile |
跳过指定数目的元素或当谓词匹配时,跳过 | 是 |
| Sum | 对谓词选定的值求和 | 否 |
| Take TakeWhile |
从数据源的开始处选择指定数目的元素或当谓词匹配时,选择条目 | 是 |
| ToArray ToDictionary ToList |
把数据源转换成数组或其他集合类型 | 否 |
| Where | 过滤掉源数据中与谓词不匹配的条目 | 是 |
3.LINQ查询表达式
|
约束 |
LINQ查询表达式必须以from子句开头,以select或group子句结束。 |
|
关键字 |
功能 |
|
from…in… |
指定要查找的数据源以及范围变量,多个from子句则表示从多个数据源查找数据。 注意:c#编译器会把“复合from子句”的查询表达式转换为SelectMany()扩展方法。 |
|
join…in…on…equals… |
指定多个数据源的关联方式 |
|
let |
引入用于存储查询表达式中子表达式结果的范围变量。通常能达到层次感会更好,使代码更易于阅读。 |
|
orderby、descending |
指定元素的排序字段和排序方式。当有多个排序字段时,由字段顺序确定主次关系,可指定升序和降序两种排序方式 |
|
where |
指定元素的筛选条件。多个where子句则表示了并列条件,必须全部都满足才能入选。每个where子句可以使用谓词&&、||连接多个条件表达式。 |
|
group |
指定元素的分组字段。 |
|
select |
指定查询要返回的目标数据,可以指定任何类型,甚至是匿名类型。(目前通常被指定为匿名类型) |
|
into |
提供一个临时的标识符。该标识可以引用join、group和select子句的结果。 1) 直接出现在join子句之后的into关键字会被翻译为GroupJoin。(into之前的查询变量可以继续使用) 2) select或group子句之后的into它会重新开始一个查询,让我们可以继续引入where, orderby和select子句,它是对分步构建查询表达式的一种简写方式。(into之前的查询变量都不可再使用) |
4.复写linq语法详细中的11个例子
1)简单的LINQ语法
|
1
2
3
4
5
6
7
|
//1var ss=from r in db.testTable select r;//2var ss1=db.testTable;//3string sssql="selec * from testTable"; |
2)带Where的查询
|
1
2
3
4
5
6
7
8
|
//1var ss=from r in db.testTable where r.rpId>10 select r;//2var ss1=db.testTable.Where(p=>p.rpId>10);//3string sssql="select * from testTable where rpId>10"; |
3)简单函数计算
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//1//获取最大的rpIdvar ss=(from r in db.testTable select r).Max(p=>p.rpId);//获取最小的rpIdvar ss=(from r in db.testTable select r).Min(p=>p.rpId);//获取结果集的总数var ss=(from r in db.testTable select r).Count();//获取rpId的和var ss=(from r in db.testTable select r).Sum(p=>p.rpId); //2//var ss1 = db.testTable.Max(p=>p.rpId);//var ss1 = db.testTable.Min(p => p.rpId);//var ss1 = db.testTable.Count() ;var ss1 = db.testTable.Sum(p => p.rpId);Response.Write(ss);//3string sssql = "select max(rpId) from testTable"; sssql = "select min(rpId) from testTable"; sssql = "select count(1) from testTable"; sssql = "select sum(rpId) from testTable"; |
4)排序
|
1
2
3
4
5
6
7
8
9
10
11
|
var ss=from r in db.testTable where r.rpId>10 orderby r.rpId descending //倒序 //orderby r.rpId ascending //正序 select r;//正序var ss1=db.testTable.OrderBy(p=>p.rpId).Where(p=>p.rpId>10).ToList();//倒序var ss2=db.testTable.OrderByDescending(p=>p.rpId).Where(p=>p.rpId>10).ToList();string sssql="select * from testTable where rpId>10 order by rpId [decs|asc]"; |
5)top(1)
|
1
2
3
4
5
6
7
8
|
//如果取最后一个可以按倒序排列再取值var ss=(from r in db.testTable select r).FirstOrDefault();//var ss1=db.testTable.FirstOrDefault();var ss1=db.testTable.First();string sssql="select top(1) * from testTable"; |
6)跳过前面多少条数据取余下的数据
|
1
2
3
4
5
6
7
8
|
//1var ss=(from r in db.testTable orderby r.rpId descending select r).Skip(10); //跳过前10条数据,取10条之后的所有数据//2var ss1=db.testTable.OrderByDescending(p=>p.rpId).Skip(10).ToList();//3string sssql="select * from (select ROW_NUMBER() over(order by rpId desc) as rowNum,* from testTable) as t where rowNum>10"; |
7)分页数据查询
|
1
2
3
4
5
6
7
8
9
10
11
|
//1var ss=(from r in db.testTable where r.rpId>10 orderby r.rpId descending select r).Skip(10).Take(10); //取第11条到第20条的数据//2.Take(10):数据从开始获取,获取指定数量的连续数据var ss1=db.testTable.OrderByDescending(p=>p.rpId).Where(p=>p.rpId>10).Skip(10).Take(10).ToList();//3string sssql="select * from (select ROW_NUMBER() over(order by rpId desc) as rowNum,* from testTable) as c where rowNum>10and rowNum<=20"; |
8)包含,类似like ‘%%’
|
1
2
3
4
5
6
7
8
|
//1var ss = from r in db.testTable where r.SortsText.Contains("张") select r;//2var ss1 = db.testTable.Where(p => p.SortsText.Contains("张")).ToList();//3string sssql = "select * from testTable where SortsText like '%张%'"; |
参考资料
C#Linq的10个练习的更多相关文章
- C# LINQ(10)
LINQ 查询 var query = from r in Formula1.GetChampions() where r.Country == "Brazil" orderby ...
- Linq 学习笔记
简介: LINQ 提供一种统一的方式,让我们能在C#语言中直接查询和操作各种数据. LINQ是用来描述数据访问总体方式的术语.LINQ to Object是针对实现了IEnumerable< ...
- Linq/List/Array/IEnumerable等集合操作
来源:http://www.cnblogs.com/liushanshan/archive/2011/01/05/1926263.html 目录 1 LINQ查询结果集 1 2 Sy ...
- TinyFrame升级之九:实现复杂的查询
本章我们主要讲解如何实现一个复杂的查询.由于目前TinyFrame框架已经投入到了实际的项目生产中,所以我很乐意将项目中遇到的任何问题做以记录并备忘. 这章中,我们提到的查询界面如下所示: 其中,涉及 ...
- Demo+在Linux下运行(CentOS7+dotnetcore sdk)
来份ASP.NET Core尝尝 0x01.前言 学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是 略懂一二.如果有错误,还望见谅. 本文还是和之 ...
- 8天玩转并行开发——第三天 plinq的使用
原文 8天玩转并行开发——第三天 plinq的使用 相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是传统的linq只是串行代码,在并行的 年代如果 ...
- 用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署
用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署 这是微软官方SignalR 2.0教程Getting Started with En ...
- 机器Coding For WPF
declare @modelcode varchar(90)='AutoProjectType'declare @ns varchar(90)='WpfApplication'declare @dat ...
- Core3.1WebApi使用MongoDB
好久没有使用MongoDB了,重新测试使用,版本不一样之前很多方法都使用不了了,下面为部分测试,下次再来更新测试 测试中使用的命令 // 新增读写的用户 db.createUser({ user:'f ...
随机推荐
- Multi-hierarchical Independent Correlation Filters for Visual Tracking(MFT)略读
作者写道: 有幸在本届的VOT 2018 主赛中,我们的参赛方案Multi-solution Fusion for Visual Tracking(MFT)获得第一名的成绩,通过结果来看,MFT无论在 ...
- 异步并发利器:实际项目中使用CompletionService提升系统性能的一次实践
场景 随着互联网应用的深入,很多传统行业也都需要接入到互联网.我们公司也是这样,保险核心需要和很多保险中介对接,比如阿里.京东等等.这些公司对于接口服务的性能有些比较高的要求,传统的核心无法满足要求, ...
- golang 运算符
/* 算术运算符 : + - * / % ++ -- 关系运算符 : == != > < >= <= 逻辑运算符 : && || ! 赋值运算符 : = += ...
- 20200120--python学习第12天
今日内容 函数中高级(闭包/高价函数) 内置函数 内置模块(.py文件) 内容回顾 函数基础概念 a.函数基本结构 def func(arg): return arg v1 = func(123) b ...
- CVE-2020-0668-Windows服务跟踪中的普通特权升级错误
CVE-2020-0668-Windows服务跟踪中的普通特权升级错误 在这里中,我将讨论在Windows Service跟踪中发现的任意文件移动漏洞.从我的测试来看,它影响了从Vista到10的所有 ...
- linux使用和基础操作
1.linux系统初使用 linux有图形终端和字符终端,关于linux学习以字符终端为主,即命令行操作: [root@centos7 ~]#runlevel 查看当前工作模式N 3 //3为字符终端 ...
- 2000_narrowband to wideband conversion of speech using GMM based transformation
论文地址:基于GMM的语音窄带到宽带转换 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/12151027.html 摘要 在不改变现有通信网络的情 ...
- jdk升级后Eclipse无法启动问题
overview: 今日安装jdk11,设置好环境变量后,eclipse无法运行,由于项目依赖原因,不想更新eclipse的版本. 我的jdk是1.8,在将环境变量设回1.8后依然无法运行.在多次尝试 ...
- 架构师成长系列 | 从 2019 到 2020,Apache Dubbo 年度回顾与总结
作者 | 刘军(陆龟)Apache Dubbo PMC 本文整理自架构师成长系列 2 月 18 日直播课程. 关注"阿里巴巴云原生"公众号,回复 "218",即 ...
- Foxmail for windows 客户端设置和 IMAP、POP3/SMTP 的设置
Foxmail支持微信扫码.手机验证码.账号密码三种方式新建腾讯企业邮箱. 注意:目前仅foxmail 7.2.11版本支持微信扫码和手机验证码新建腾讯企业邮箱,可以foxmail官网https:// ...