语言继承查询(Language Integrated Query, LINQ),在C#编程语言中集成了查询语法,可以用相同的语法访问不同的数据源,LINQ提供了不同数据源的抽象层,所以可以使用相同语法。

  1. public class Book
  2. {
  3. public int Id { get; set; }
  4. /// <summary>
  5. /// 书名
  6. /// </summary>
  7. public string BookName { get; set; }
  8. /// <summary>
  9. /// 作者id
  10. /// </summary>
  11. public int AutherId { get; set; }
  12. /// <summary>
  13. /// 类型
  14. /// </summary>
  15. public string Type { get; set; }
  16. /// <summary>
  17. /// 售价
  18. /// </summary>
  19. public decimal Price { get; set; }
  20. /// <summary>
  21. /// 销量
  22. /// </summary>
  23. public int Sales { get; set; }
  24. }
  25. public class Auther
  26. {
  27. public int Id { get; set; }
  28. /// <summary>
  29. /// 作者
  30. /// </summary>
  31. public string AutherName { get; set; }
  32. }
  33. public class Library
  34. {
  35. public string Address { get; set; }
  36. /// <summary>
  37. /// 书本
  38. /// </summary>
  39. public List<Book> BookList { get; set; }
  40. }

1、条件查询(Where)

  1. var query = from book in bookList
  2. where book.Price >
  3. orderby book.Sales descending,book.BookName
  4. select book;
  5. //等同于
  6. var query = bookList.Where(n => n.Price > ).OrderByDescending(g => g.Sales).ThenBy(y => y.BookName);

  需要注意的是,延迟查询

  1. var ary = new List<string>(){ "Aa", "Bb", "Cc"};
  2.  
  3. var a1 = ary.Where(n => n.Contains("a"));//["Aa"]
  4.  
  5. ary.Add("Ga");
  6.  
  7. a1;//["Aa", "Ga"]

  解决这个问题,只需要用 ToList();

  1. var ary = new List<string>(){ "Aa", "Bb", "Cc"};
  2.  
  3. var a1 = ary.Where(n => n.Contains("a")).ToList();//["Aa"]
  4.  
  5. ary.Add("Ga");
  6.  
  7. a1;//["Aa"]

  索引筛选

  1. //销量大于50且为奇数行
  2. var query = bookList.Where((n, index) => n.Sales > && index% != );

2、复合查询(SelectMany)

  1. //查找所有图书馆中的小说
  2. var query = from library in libraryList
  3. from book in library.BookList
  4. where book.Type == "小说"
  5. select book;
  6.  
  7. //等同于
  8. query = libraryList.SelectMany(n => n.BookList).Where(g => g.Type == "小说");
  9.  
  10. //组织返回结果
  11. query = libraryList.SelectMany(n => n.BookList, (n, g) => new {n.Address, g.BookName, g.Sales}).Where(y => y.Sales > );

3、集合连接

  1. //内连接
  2. var query1 = from book in bookList
  3.      join auther in autherList on book.AutherId equals auther.Id
  4.      select new { book.BookName, auther.AutherName };
  5. //组连接
  6. var query2 = from auther in autherList
  7.    join book in bookList on auther.Id equals book.AutherId into items
  8.    select new { auther.AutherName, Books = items };
  9. //左外连接
  10. var query3 = from book in bookList
  11. join auther in autherList on book.AutherId equals auther.Id into items
  12. from auther in items.DefaultIfEmpty()
  13. select new
  14. {
  15. book.BookName,
  16. AutherName = auther == default(Auther) ? "无" : auther.AutherName
  17. };
  18. //多条件连接
  19. var query4 = from book in bookList
  20. join auther in autherList on new {name = book.BookName, id = book.AutherId} equals new {name = auther.AutherName, id = auther.Id}
  21. select book;

4、排序(OrderBy、ThenBy)

  1. var query = from book in bookList
  2. orderby book.Sales descending, book.AutherId, book.Price descending
  3. select book;
  4. //等同于
  5. query = bookList.OrderByDescending(n => n.Sales).ThenBy(g => g.AutherId).ThenByDescending(y => y.Price);

5、分组(GroupBy)

  1. //单一条件分组
  2. var query = from book in bookList
  3. group book by book.Type into bs
  4. select bs.First();
  5. //等同于
  6. query = bookList.GroupBy(n => n.Type).Select(g => g.First());
  7.  
  8. //多条件分组
  9. var query = from book in bookList
  10. group book by new { book.Type, book.AutherId } into bs
  11. select new
  12. {
  13. Type = bs.First().Type,
  14. AutherId = bs.First().AutherId,
  15. Count = bs.Count()
  16. };
  17. //等同于
  18. query = bookList.GroupBy(n => new {n.Type, n.AutherId}).Select(g => new
  19. {
  20. Type = g.First().Type,
  21. AutherId = g.First().AutherId,
  22. Count = g.Count()
  23. });

6、合并与分区(Zip、Take、Skip)

  1. int[] numbers = { , , };
  2. string[] words = { "One", "Two", "Three", "Four" };
  3. //元素依次组合,长度为较小的集合
  4. IEnumerable<string> zip = numbers.Zip(words, (n, g) => n + "=" + g);//["1=One", "2=Two", "3=Three"]
  5.  
  6. //跳过集合的前n个元素
  7. var skip = words.Skip();//["Four"]
  8. //获取集合的前n个元素,有延迟
  9. var take = numbers.Take();//[1, 2]
  10.  
  11. int pageSize = ;//每页容量
  12. int pageNum = ;//页数
  13. var page = words.Skip(pageSize * pageNum).Take(pageSize);//["One", "Two", "Three"]

7、集合操作(Distinct、Union、Concat、Intersect、Except)

  1. int[] ary1 = {, , , , };
  2. int[] ary2 = {, , , , , };
  3.  
  4. //合并,自动去重
  5. var union = ary1.Union(ary2);//1, 2, 3, 4, 5, 6, 7, 10
  6. //合并,不会去重
  7. var concat = ary1.Concat(ary2);//1, 2, 2, 4, 5, 3, 5, 5, 6, 10, 7
  8. //去重
  9. var distict = ary1.Distinct();//1, 2, 4, 5
  10. //取交集,自动去重
  11. var intersect = ary1.Intersect(ary2);//5
  12. //取补集,自动去重
  13. var except = ary1.Except(ary2);//1, 2, 4

8、类型筛选(ofType)

  1. object[] data = { "one", , ,"three"};
  2. var query = data.ofType<string>();

9、聚合操作符(Count、Sum、Min、Max、Average、Aggregate)

  1. //个数
  2. var count = bookList.Count(n => n.Sales > );
  3. //求和
  4. var sum = bookList.Sum(n => n.Price);
  5. //最小值
  6. var min = bookList.Min(n => n.Sales);
  7. //最大值
  8. var max = bookList.Max(n => n.Price);
  9. //平均值
  10. var average = bookList.Average(n => n.Sales);
  11. //累加,总销量
  12. var aggregate1 = bookList.Select(n => n.Sales).Aggregate((g, y) => g + y);
  13. //累加,初始值
  14. var aggregate2 = bookList.Select(n => n.Sales).Aggregate(, (g, y) => g + y);
  15. //累加,初始值,结果处理
  16. var aggregate3 = bookList.Select(n => n.Sales).Aggregate(, (g, y) => g + y, result => result/);

10、转换操作符 (ToArray、ToDictionary、ToList、ToLookup、Cast)

  1. Book[] ary = bookList.ToArray();
  2.  
  3. List<Book> list = bookList.ToList();
  4.  
  5. Dictionary<int, Book> dic = bookList.ToDictionary<Book, int>(n => n.Id);
  6.  
  7. //转换成LookUp集合,key-以key分组的内部集合
  8. ILookup<string, Book> look = bookList.ToLookup(n => n.Type);
  9.  
  10. IEnumerable<Book> cast = ary.Cast<Book>();

【Linq】常用语法汇总的更多相关文章

  1. Angular学习资料大全和常用语法汇总(让后端程序员轻松上手)

    前言: 首先为什么要写这样的一篇文章呢?主要是因为前段时间写过一些关于Angualr的相关实战文章,有些爱学习的小伙伴对这方面比较感兴趣,但是又不知道该怎么入手(因为认识我的大多数小伙伴都是后端的同学 ...

  2. sql 常用语法汇总

    Sql常用语法 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控 ...

  3. python3+selenium常用语法汇总

    Selenium常用语法总结 一.Selenium常用定位语法 1.元素定位 (1)ID定位元素: find_element_by_id(‘’) (2)通过元素的类名称定位元素: find_eleme ...

  4. 【.NET基础】Linq常用语法代码演示

    前言:前言不重要,linq入门常用的语法,linq语法可以用来写操作集合.数据库表集合等等几乎所有集合类型的操作.下面就写几个案例(以List集合来做的),看代码和运行结果即可. 本文演示环境:VS2 ...

  5. Linq常用语法详细

    1.简单的linq语法 //1 var ss = from r in db.Am_recProScheme select r; //2 var ss1 = db.Am_recProScheme; // ...

  6. SQL SERVER常用语法汇总

    阅读目录 一.SQL分类 二.基础语句 三.sql技巧 四.(MS SQL Server)SQL语句导入导出大全 回到目录 一.SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,D ...

  7. Groovy常用语法汇总

    基本语法 1.Grovvy的注释分为//和/**/和java的一样. 2.Grovvy语法可以不已分号结尾. 3.单引号,里面的内容严格的对应java中的String,不对$符号进行转义. def s ...

  8. SringBoot整合velocity及常用语法

    项目地址:https://github.com/chywx/springboot-velocity 背景 由于公司业务面向的是非洲市场 那边有些国家智能机并未普及,像乌干达地区还是以功能机为主 为了支 ...

  9. 20145222《信息安全系统设计基础》Linux常用命令汇总

    学习Linux时常用命令汇总 通过Ctrl+f键可在该网页搜索到你想要的命令. Linux中命令格式为:command [options] [arguments] //中括号代表是可选的,即有些命令不 ...

随机推荐

  1. 逆向工程-对native层的一次简单逆向实践

    关注一款app很久了,这款app为了防止别人逆向破解拉取数据做了很多工作: 防止别人修改apk包,执行关键动作时对dex文件进行md5验证: 防止用户调用接口批量拉数据,对返回的web网页里个人信息进 ...

  2. 第一次项目上Linux服务器(二:——安装jdk)

    本人采用的是rpm安装jdk1.8 1.下载jdk 去jdk下载页面找到要下载的jdk 本人下载的是jdk-8u161-linux-x64.rpm,百度云资源链接:链接:https://pan.bai ...

  3. nodejs项目总结

    前几天花了3天时间,搭建.开发了一个包含客户端.cms.server端的项目,也因着以前有php的开发经验,以及sql的设计和应用能力,倒也没遇到什么阻碍.至于项目结构搭建(架构),也是共通的,以模块 ...

  4. Netty 启动过程源码分析 (本文超长慎读)(基于4.1.23)

    前言 作为一个 Java 程序员,必须知道Java社区最强网络框架-------Netty,且必须看过源码,才能说是了解这个框架,否则都是无稽之谈.今天楼主不会讲什么理论和概念,而是使用debug 的 ...

  5. 写个OAuth2.0的请求端来测试自己的OAuth2.0服务端(二)

    在上一篇文章中,我们介绍了怎么创建自己的服务器,现在我们开始写个client端,来测试. 我们创建一个MVC项目,叫TestOAuthClient 1. 代码开始 1)第一步,我们创建一个MainCo ...

  6. ASP.NET MVC使用RenderSection渲染节点

    几天没有时间做ASP.NET mvc练习,忙于ERP的二次开发.忙里间,想起MVC还有很多基础的知识需要撑握与了解.记得以前有练习过<MVC母版页_Layout.cshtml> http: ...

  7. hadoop的namenode故障处理方法

    Namenode 故障后,可以采用如下两种方法恢复数据. 方法一:将 SecondaryNameNode 中数据拷贝到 namenode 存储数据的目录: 方法 二: 使用 -importCheckp ...

  8. HDU1045(KB10-A 二分图最大匹配)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  9. HDU1698(KB7-E 线段树)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. django-强大的ORM

    一.ORM简介 (对象关系映射:object relationship mapping) MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的 ...