语言继承查询(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】常用语法汇总的更多相关文章

  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. shell脚本案例分享 - 业务系统日志自定义保留或删除需求

    需求说明:  线上某些业务系统的日志不定期产生, 有的每天产生, 有的好几天才产生, 因为系统只有在用的时候才产生日志,日志文件均存放在以当天日期命名的目录下. 当日志目录越来越多时就需要处理, 由此 ...

  2. Linux 技巧:让进程在后台可靠运行的几种方法(转)

    我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...

  3. 自制 Chrome Custom.css 设置网页字体为微软雅黑扩展

    自己做的將網頁自動替換為微軟雅黑的擴展.很好用. 將Customcss.rcx拖到擴展裏就可. 下載:Customcss.zip

  4. C语言指针的高级操作

    C语言指针的高级操作 指针  指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...

  5. 浅析Java源码之HttpServlet

    纯粹是闲的,在慕课网看了几集的Servlet入门,刚写了1个小demo,就想看看源码,好在也不难 主要是介绍一下里面的主要方法,真的没什么内容啊~ 源码来源于apache-tomcat-7.0.52, ...

  6. 乐字节-Java8新特性之Optional

    上一篇小乐带大家了解了Java新特性之Stream,接下来将会继续述说Java新特性之Optional Optional<T>类(java.util.Optional)是一个容器类,代表一 ...

  7. static ,final 、abstract的作用,以及它们的联系和区别

    static可以修饰变量,修饰的变量直接属于某各类,不局限于某个方法,无法在成员方法中修饰变量,也不可以在静态方法中修饰变量.被static修饰的方法属于静态方法(类方法),与对象无关,与类有关.fi ...

  8. 1-初识java

    目录 java 历史 Java 平台 Java 开发环境 Java 运行原理[简] Java 历史 这里不详细记录java的历史,只是标记出时间点和事件. 时间点 事件 1991 Sun公司成立Gre ...

  9. MySQL设计之三范式的理解

    转自:https://blog.csdn.net/wangqyoho/article/details/52900585 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要 ...

  10. ionic 项目下 有时候发现select标签用动态数据绑定后点击出不来的情况

    一 第一种方法 在select 标签的父标签加上  data-tap-disabled=”true” 二 找到 ionic.bundle.js文件 下边有个方法 function tapIgnoreE ...