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
|
//1
var ss=from r in db.testTable
select r;
//2
var ss1=db.testTable;
//3
string sssql= "selec * from testTable" ;
|
2)带Where的查询
1
2
3
4
5
6
7
8
|
//1
var ss=from r in db.testTable
where r.rpId>10
select r;
//2
var ss1=db.testTable.Where(p=>p.rpId>10);
//3
string 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
//获取最大的rpId
var ss=(from r in db.testTable select r).Max(p=>p.rpId);
//获取最小的rpId
var 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);
//3
string 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
|
//1
var ss=(from r in db.testTable
orderby r.rpId descending
select r).Skip(10); //跳过前10条数据,取10条之后的所有数据
//2
var ss1=db.testTable.OrderByDescending(p=>p.rpId).Skip(10).ToList();
//3
string 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
|
//1
var 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();
//3
string sssql="select * from (select ROW_NUMBER() over(order by rpId desc) as rowNum,* from testTable) as c where rowNum>10
and rowNum<=20";
|
8)包含,类似like ‘%%’
1
2
3
4
5
6
7
8
|
//1
var ss = from r in db.testTable
where r.SortsText.Contains( "张" )
select r;
//2
var ss1 = db.testTable.Where(p => p.SortsText.Contains( "张" )).ToList();
//3
string sssql = "select * from testTable where SortsText like '%张%'" ;
|
参考资料
linq语法详细
Linq之旅:Linq入门详解(Linq to Objects)
转载于:https://www.cnblogs.com/iwsx/p/7018395.html
C#Linq的10个练习相关推荐
- Go语言写的解析器(支持json,linq,sql,net,http等)
Monkey程序语言 Monkey v2.0版本已发布. monkey v2.0 增加了如下内容: 新增 short arrow(->)支持(类似C#的lambda表达式) 增加 列表推导和哈希 ...
- Linq之select子句
在Linq中select子句用来指定查询结果的类型和表现形式.Linq查询要么以select子句结尾,要么以group子句结尾. 1 List<UserBaseInfo> users = ...
- LINQ体验系列文章导航
LINQ体验系列文章导航 LINQ推荐资源 推荐一个大家学习和交流LINQ的地方,就是博客园的LINQ专题和LINQ交流小组.LINQ专题中整理了有关LINQ方方面面的入门.进阶.深入的文章:学习中遇 ...
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试...
现在可以对登录窗口进行调试了. 打开系统的首页页面文件,Views\Home目录下的Index.cshtml文件.要动态加载登录窗口,需要先设置好加载路径,因而在onReady函数上加入以下代码: E ...
- 8天玩转并行开发——第三天 plinq的使用
8天玩转并行开发--第三天 plinq的使用 原文 8天玩转并行开发--第三天 plinq的使用 相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是 ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-代码解析...
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍一文之中我们对AgileEAS.NET S ...
- 用c#控制台模拟双色球随机选
代码 1 2 3 4 using System; 5 6 using System.Collections.Generic; 7 8 using System.Linq; ...
- c#程序设计教程 唐大仕pdf_C#程序设计教程(第2版)
目 录 第1章 C#程序设计简介 1-1 1.1C#语言及其环境 1-1 1.1.1C#的产生与发展 1-1 1.1.2C#的环境--Microsoft.NET 1-2 1.1.3C#的特点 1-5 ...
- Nancy之基于Nancy.Hosting.Aspnet的小Demo
Nancy之基于Nancy.Hosting.Aspnet的小Demo 原文:Nancy之基于Nancy.Hosting.Aspnet的小Demo 近来学习了一下Nancy这个框架,感觉挺好用的,就写篇 ...
最新文章
- ELK不香了?企业级日志平台后起之秀 Graylog
- 真正理解线程上下文类加载器(多案例分析)
- vs实现python c扩展模块
- nginx的root和alias指令的区别
- Base64 UrlEncode 区别
- 新增成功到编制为空bug_36 个JS 面试题为你助力金九银10
- linux cat read line,cat file | while read line的问题
- 恣无忌惮的拼音及解释
- 数据挖掘技术研究现状
- 计算机基础客户端v7,ComwareV7
- 百度原创度在线检测_资深自媒体作者:做自媒体没有这款“原创度检测”软件是不行的...
- 光影精灵usb安装linux,惠普光影精灵5笔记本怎么装win10系统(uefi+gpt)
- 调研之路 --- MXF
- ALLEGRO 任意形状铜皮倒圆角
- 我最喜欢的音乐系列之李连杰电影插曲
- Python之文件操作(常用操作)
- 田蕴章书法讲座《每日一题,每日一字》(2) 文字整理 ——火字、必字与书法笔顺
- 移动宽带套餐介绍_中国移动宽带套餐有哪些,谢谢!
- 论文阅读笔记五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)
- kali升级操作系统
热门文章
- 紫皮java_java如果已知一个日期为2007/3/8,求10天后是哪一天,367天后呢
- 商业方向的大数据专业_好程序员大数据培训分享大数据就业方向有哪些
- php 的超全局数组,PHP超全局数组(Superglobals)介绍
- android 拨打多个电话,Android的第一个应用(拨打电话)
- pid和linux的关系,linux – bash pid和$$之间的区别
- python方法与重载_python特殊方法和运算符重载(番外--重载)
- Oracle/PLSQL While Loop
- ORACLE中的自治事务
- 安卓学习笔记12:安卓按键事件
- 安卓案例:利用下拉列表选择科目