【Linq】常用语法汇总
语言继承查询(Language Integrated Query, LINQ),在C#编程语言中集成了查询语法,可以用相同的语法访问不同的数据源,LINQ提供了不同数据源的抽象层,所以可以使用相同语法。
public class Book
{
public int Id { get; set; }
/// <summary>
/// 书名
/// </summary>
public string BookName { get; set; }
/// <summary>
/// 作者id
/// </summary>
public int AutherId { get; set; }
/// <summary>
/// 类型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 售价
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 销量
/// </summary>
public int Sales { get; set; }
}
public class Auther
{
public int Id { get; set; }
/// <summary>
/// 作者
/// </summary>
public string AutherName { get; set; }
}
public class Library
{
public string Address { get; set; }
/// <summary>
/// 书本
/// </summary>
public List<Book> BookList { get; set; }
}
1、条件查询(Where)
var query = from book in bookList
where book.Price >
orderby book.Sales descending,book.BookName
select book;
//等同于
var query = bookList.Where(n => n.Price > ).OrderByDescending(g => g.Sales).ThenBy(y => y.BookName);
需要注意的是,延迟查询
var ary = new List<string>(){ "Aa", "Bb", "Cc"};
var a1 = ary.Where(n => n.Contains("a"));//["Aa"]
ary.Add("Ga");
a1;//["Aa", "Ga"]
解决这个问题,只需要用 ToList();
var ary = new List<string>(){ "Aa", "Bb", "Cc"};
var a1 = ary.Where(n => n.Contains("a")).ToList();//["Aa"]
ary.Add("Ga");
a1;//["Aa"]
索引筛选
//销量大于50且为奇数行
var query = bookList.Where((n, index) => n.Sales > && index% != );
2、复合查询(SelectMany)
//查找所有图书馆中的小说
var query = from library in libraryList
from book in library.BookList
where book.Type == "小说"
select book; //等同于
query = libraryList.SelectMany(n => n.BookList).Where(g => g.Type == "小说"); //组织返回结果
query = libraryList.SelectMany(n => n.BookList, (n, g) => new {n.Address, g.BookName, g.Sales}).Where(y => y.Sales > );
3、集合连接
//内连接
var query1 = from book in bookList
join auther in autherList on book.AutherId equals auther.Id
select new { book.BookName, auther.AutherName };
//组连接
var query2 = from auther in autherList
join book in bookList on auther.Id equals book.AutherId into items
select new { auther.AutherName, Books = items };
//左外连接
var query3 = from book in bookList
join auther in autherList on book.AutherId equals auther.Id into items
from auther in items.DefaultIfEmpty()
select new
{
book.BookName,
AutherName = auther == default(Auther) ? "无" : auther.AutherName
};
//多条件连接
var query4 = from book in bookList
join auther in autherList on new {name = book.BookName, id = book.AutherId} equals new {name = auther.AutherName, id = auther.Id}
select book;
4、排序(OrderBy、ThenBy)
var query = from book in bookList
orderby book.Sales descending, book.AutherId, book.Price descending
select book;
//等同于
query = bookList.OrderByDescending(n => n.Sales).ThenBy(g => g.AutherId).ThenByDescending(y => y.Price);
5、分组(GroupBy)
//单一条件分组
var query = from book in bookList
group book by book.Type into bs
select bs.First();
//等同于
query = bookList.GroupBy(n => n.Type).Select(g => g.First()); //多条件分组
var query = from book in bookList
group book by new { book.Type, book.AutherId } into bs
select new
{
Type = bs.First().Type,
AutherId = bs.First().AutherId,
Count = bs.Count()
};
//等同于
query = bookList.GroupBy(n => new {n.Type, n.AutherId}).Select(g => new
{
Type = g.First().Type,
AutherId = g.First().AutherId,
Count = g.Count()
});
6、合并与分区(Zip、Take、Skip)
int[] numbers = { , ,  };
string[] words = { "One", "Two", "Three", "Four" };
//元素依次组合,长度为较小的集合
IEnumerable<string> zip = numbers.Zip(words, (n, g) => n + "=" + g);//["1=One", "2=Two", "3=Three"]
//跳过集合的前n个元素
var skip = words.Skip();//["Four"]
//获取集合的前n个元素,有延迟
var take = numbers.Take();//[1, 2]
int pageSize = ;//每页容量
int pageNum = ;//页数
var page = words.Skip(pageSize * pageNum).Take(pageSize);//["One", "Two", "Three"]
7、集合操作(Distinct、Union、Concat、Intersect、Except)
int[] ary1 = {, , , , };
int[] ary2 = {, , , , , };
//合并,自动去重
var union = ary1.Union(ary2);//1, 2, 3, 4, 5, 6, 7, 10
//合并,不会去重
var concat = ary1.Concat(ary2);//1, 2, 2, 4, 5, 3, 5, 5, 6, 10, 7
//去重
var distict = ary1.Distinct();//1, 2, 4, 5
//取交集,自动去重
var intersect = ary1.Intersect(ary2);//5
//取补集,自动去重
var except = ary1.Except(ary2);//1, 2, 4
8、类型筛选(ofType)
object[] data = { "one",  ,  ,"three"};
var query = data.ofType<string>();
9、聚合操作符(Count、Sum、Min、Max、Average、Aggregate)
//个数
var count = bookList.Count(n => n.Sales > );
//求和
var sum = bookList.Sum(n => n.Price);
//最小值
var min = bookList.Min(n => n.Sales);
//最大值
var max = bookList.Max(n => n.Price);
//平均值
var average = bookList.Average(n => n.Sales);
//累加,总销量
var aggregate1 = bookList.Select(n => n.Sales).Aggregate((g, y) => g + y);
//累加,初始值
var aggregate2 = bookList.Select(n => n.Sales).Aggregate(, (g, y) => g + y);
//累加,初始值,结果处理
var aggregate3 = bookList.Select(n => n.Sales).Aggregate(, (g, y) => g + y, result => result/);
10、转换操作符 (ToArray、ToDictionary、ToList、ToLookup、Cast)
Book[] ary = bookList.ToArray(); List<Book> list = bookList.ToList(); Dictionary<int, Book> dic = bookList.ToDictionary<Book, int>(n => n.Id); //转换成LookUp集合,key-以key分组的内部集合
ILookup<string, Book> look = bookList.ToLookup(n => n.Type); IEnumerable<Book> cast = ary.Cast<Book>();
【Linq】常用语法汇总的更多相关文章
- Angular学习资料大全和常用语法汇总(让后端程序员轻松上手)
		前言: 首先为什么要写这样的一篇文章呢?主要是因为前段时间写过一些关于Angualr的相关实战文章,有些爱学习的小伙伴对这方面比较感兴趣,但是又不知道该怎么入手(因为认识我的大多数小伙伴都是后端的同学 ... 
- sql 常用语法汇总
		Sql常用语法 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控 ... 
- python3+selenium常用语法汇总
		Selenium常用语法总结 一.Selenium常用定位语法 1.元素定位 (1)ID定位元素: find_element_by_id(‘’) (2)通过元素的类名称定位元素: find_eleme ... 
- 【.NET基础】Linq常用语法代码演示
		前言:前言不重要,linq入门常用的语法,linq语法可以用来写操作集合.数据库表集合等等几乎所有集合类型的操作.下面就写几个案例(以List集合来做的),看代码和运行结果即可. 本文演示环境:VS2 ... 
- Linq常用语法详细
		1.简单的linq语法 //1 var ss = from r in db.Am_recProScheme select r; //2 var ss1 = db.Am_recProScheme; // ... 
- SQL SERVER常用语法汇总
		阅读目录 一.SQL分类 二.基础语句 三.sql技巧 四.(MS SQL Server)SQL语句导入导出大全 回到目录 一.SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,D ... 
- Groovy常用语法汇总
		基本语法 1.Grovvy的注释分为//和/**/和java的一样. 2.Grovvy语法可以不已分号结尾. 3.单引号,里面的内容严格的对应java中的String,不对$符号进行转义. def s ... 
- SringBoot整合velocity及常用语法
		项目地址:https://github.com/chywx/springboot-velocity 背景 由于公司业务面向的是非洲市场 那边有些国家智能机并未普及,像乌干达地区还是以功能机为主 为了支 ... 
- 20145222《信息安全系统设计基础》Linux常用命令汇总
		学习Linux时常用命令汇总 通过Ctrl+f键可在该网页搜索到你想要的命令. Linux中命令格式为:command [options] [arguments] //中括号代表是可选的,即有些命令不 ... 
随机推荐
- Tomcat学习总结(12)—— Tomcat集群配置
			现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问量过大,就会出现服应用务器崩溃的情况,这个时候怎 ... 
- 【IT笔试面试题整理】链表
			如何准备 Linked list questions are extremely common These can range from simple (delete a node ina linke ... 
- java面向对象基础(三):对象转型和多态
			*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ... 
- 网络之AFNetworking
			Json.Xml解析第三方库多了去,就不一一说明,现在开始进入AFNetworking.由于AFNetworking支持ARC,ASI不支持ARC,现在越来越多的开始使用AFNetworking. h ... 
- 常用正则表达式:手机、电话、邮箱、身份证、IP地址、网址、日期等
			转载源:http://blog.csdn.net/lun379292733/article/details/8169807 <script type="text/JavaScript& ... 
- 我的第一篇博文,开启我的Java程序人生之旅!
			原文:https://blog.csdn.net/CodeYearn/article/details/89190342 自我介绍: 姓名:蔡余 性别:男 年龄:21 职业:Java开发工程师 家乡:湖 ... 
- Oracle总结之plsql编程(基础七)
			紧接基础六,对oracle角色和权限的管理之后,在接下来的几次总结中来就最近工作中用过的plsql编程方面的知识进行总结,和大家分享! 原创作品,转自请注明出处:https://www.cnblogs ... 
- Java开发中常用的设计模式(二)---单例模式
			一. 懒汉式单例 //懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { private Singleton() {} private static Sing ... 
- EF DataFirst修改数据类型
			在做软件的时候我们可能会遇到这样的问题,就是在使用EF的时候,有时候精度不一样, 我们用整数来计算肯定是比浮点数来得快的,但我在MySQL里面存储的数据类型是decimal的,我生成EF后, 里面的数 ... 
- ubuntu下安装 Sublime Text 3 及 PlantUML 绘图插件
			ubuntu下只想做C++的程序代码编写,最开始选择了codeblock,主要目的是安装简单,集成度高,还可以调试,但是用的时候老是无故退出,改了半天的代码就这样丢失,挺苦恼的,可能跟自己装的系统比较 ... 
