1.LINQ的两种语法

LINQ查询时有两种语法可供选择:查询表达式(Query Expression)和方法语法(Fluent Syntax)。
.NET公共语言运行库(CLR)并不具有查询表达式的概念。所以编译器会在程序编译时把查询表达式转为方法语法,即对扩展方法的调用。所以使用方法语法会让我们更加接近和了解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个练习相关推荐

  1. Go语言写的解析器(支持json,linq,sql,net,http等)

    Monkey程序语言 Monkey v2.0版本已发布. monkey v2.0 增加了如下内容: 新增 short arrow(->)支持(类似C#的lambda表达式) 增加 列表推导和哈希 ...

  2. Linq之select子句

    在Linq中select子句用来指定查询结果的类型和表现形式.Linq查询要么以select子句结尾,要么以group子句结尾. 1 List<UserBaseInfo> users = ...

  3. LINQ体验系列文章导航

    LINQ体验系列文章导航 LINQ推荐资源 推荐一个大家学习和交流LINQ的地方,就是博客园的LINQ专题和LINQ交流小组.LINQ专题中整理了有关LINQ方方面面的入门.进阶.深入的文章:学习中遇 ...

  4. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试...

    现在可以对登录窗口进行调试了. 打开系统的首页页面文件,Views\Home目录下的Index.cshtml文件.要动态加载登录窗口,需要先设置好加载路径,因而在onReady函数上加入以下代码: E ...

  5. 8天玩转并行开发——第三天 plinq的使用

    8天玩转并行开发--第三天 plinq的使用 原文 8天玩转并行开发--第三天 plinq的使用 相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是 ...

  6. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-代码解析...

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍一文之中我们对AgileEAS.NET S ...

  7. 用c#控制台模拟双色球随机选

    代码  1    2   3   4 using System;  5   6 using System.Collections.Generic;  7   8 using System.Linq; ...

  8. 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 ...

  9. Nancy之基于Nancy.Hosting.Aspnet的小Demo

    Nancy之基于Nancy.Hosting.Aspnet的小Demo 原文:Nancy之基于Nancy.Hosting.Aspnet的小Demo 近来学习了一下Nancy这个框架,感觉挺好用的,就写篇 ...

最新文章

  1. ELK不香了?企业级日志平台后起之秀 Graylog
  2. 真正理解线程上下文类加载器(多案例分析)
  3. vs实现python c扩展模块
  4. nginx的root和alias指令的区别
  5. Base64 UrlEncode 区别
  6. 新增成功到编制为空bug_36 个JS 面试题为你助力金九银10
  7. linux cat read line,cat file | while read line的问题
  8. 恣无忌惮的拼音及解释
  9. 数据挖掘技术研究现状
  10. 计算机基础客户端v7,ComwareV7
  11. 百度原创度在线检测_资深自媒体作者:做自媒体没有这款“原创度检测”软件是不行的...
  12. 光影精灵usb安装linux,惠普光影精灵5笔记本怎么装win10系统(uefi+gpt)
  13. 调研之路 --- MXF
  14. ALLEGRO 任意形状铜皮倒圆角
  15. 我最喜欢的音乐系列之李连杰电影插曲
  16. Python之文件操作(常用操作)
  17. 田蕴章书法讲座《每日一题,每日一字》(2) 文字整理 ——火字、必字与书法笔顺
  18. 移动宽带套餐介绍_中国移动宽带套餐有哪些,谢谢!
  19. 论文阅读笔记五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)
  20. kali升级操作系统

热门文章

  1. 紫皮java_java如果已知一个日期为2007/3/8,求10天后是哪一天,367天后呢
  2. 商业方向的大数据专业_好程序员大数据培训分享大数据就业方向有哪些
  3. php 的超全局数组,PHP超全局数组(Superglobals)介绍
  4. android 拨打多个电话,Android的第一个应用(拨打电话)
  5. pid和linux的关系,linux – bash pid和$$之间的区别
  6. python方法与重载_python特殊方法和运算符重载(番外--重载)
  7. Oracle/PLSQL While Loop
  8. ORACLE中的自治事务
  9. 安卓学习笔记12:安卓按键事件
  10. 安卓案例:利用下拉列表选择科目