Linq 是语言集成查询(Language-Integrated Query)的简称,是一系列直接将查询功能集成到 C# 语言的技术统称。Linq 提供了统一种跨数据源和数据格式使用数据的一致模型,并且 Linq 查询支持编译时类型检查和智能提示。
支持 Linq 查询的对象有:

SQL Server Database(Linq to SQL)
    XML Document(Linq to XML)
    Object Collection(Linq to Objects)
    ADO.Net Dataset(Linq to DataSet)
    Entity Framework(Linq to Entities)
    实现了 IEnumerable 或 IEnumerable<T>接口的任何对象集合
    定义 Master 和 Dog 实体:

初始化数据:

其中 masters 和 dogs 就是数据源,因为数组实现了 IEnumerable<T> 接口。
获取数据源

在 Linq 查询中,首先是指定数据源。使用 from 子句引入数据源 masters 并声明范围变量 m。

范围变量类似 foreach 循环中的迭代变量,但查询表达式中不会真正发生迭代,当执行查询时,范围变量将充当对 masters 中每个连续元素的引用。而且无需显示指定范围变量的类型,因为编译器可以推断出范围变量的类型。
筛选

筛选器实际指定要从源数据中筛选出哪些元素。并且可以使用 C# 逻辑 AND 和 OR 运算符,在 where 子句根据需要应用尽可能多的筛选器表达式。
排序

排序通过 orderby 子句,根据要排序类型的默认比较器,对返回序列中的元素排序。
分组

group 子句根据指定属性的结果进行分组。分组结果以列表的形式展示。列表中每个元素都是具有 key 成员对象,列表中的元素根据该属性被分组。而且在循环访问生成组序列的查询时,必须使用嵌套 foreach 循环,外层循环访问每个组,内层循环访问每个组的成员。
联接

联接操作用来在不同范围变量间创建关联,这里范围变量来自不同数据源。在 Linq 中,join 子句始终作用于对象集合,而非直接作用于数据库表。

在 Linq中不用像在 SQL 中频繁使用 join,因为 Linq 中的外键在对象模型中表示为包含项集合的属性。
选择(投影)

select 子句用于指定生成的查询结果,可以是整个对象、其中一个成员、成员的子集,还可以是基于计算或新对象创建的结果类型。如上例的:…… select new { DogName = d.Name, MasterName = m.Name };
延迟加载

在 Linq 中,查询变量本身只存储查询命令,不执行任何操作并且不会返回任何数据。查询实际执行将推迟在 foreach 语句中循环访问查询变量之后进行,也就是在要用到具体数据的时候才会加载到内存中,而不是直接将数据查询出来。这个概念称为延迟加载,又称为懒加载。
对一系列源元素执行聚合函数的查询必须首先循环访问这些元素,如:Count、Max、Average 和 First等。由于查询本身必须遍历以返回结果,所以这些查询在执行时不使用显示 foreach 语句。

如果要强制立即执行查询并缓存其结果可以通过 ToList 或 ToArray 方法(实际内部也是遍历了查询):
其他

只有Where、Select、OrderBy、GroupBy、Join等能用 Linq 写法,如果用Max、Min、Count、Average、Sum、Any、First、FistOrDefault、Single、SingleOrDefault、Distinct、Skip、Take 等则要用 lambda 的写法。
Any() 判断集合是否包含元素,返回值是 bool,效率一般比Count()>0高;
Distinct() 剔除完全重复数据。自定义对象的 Equals 问题:需要重写 Equals 和 GetHashCode 方法来进行内容比较。
OrderBy() 升序、OrderByDescending() 降序、ThenBy() 指定多个排序规则、也支持ThenByDescending()。这些操作不会影响原始的集合数据。
Ship(n) 跳过前面 n 条数据;
Take(n) 获取最多 n 条数据,如果不足 n 条获取全部;
Except(items) 排除当前集合中在 items 中存在的元素;
Union(items) 把当前集合和 items 集合组合;
Intersect(items) 把当前集合和 items 集合取交集;
GroupBy() 分组之后可以使用一些聚合函数:Average()、Max()、Min()、Sum()等;
SelectMany() 把集合中每个对象的集合属性的值重新拼接为一个新的集合;
Join() 可以实现和数据库一样的 Join 效果。
————————————————
版权声明:本文为CSDN博主「Annx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AnnDCorner/article/details/90919495

Linq 语法(转载)相关推荐

  1. Linq To Sql中实现Left Join与Inner Join使用Linq语法与lambda表达式

    当前有两个表,sgroup与sgroupuser,两者通过gKey关联,而sgroup表记录的是组,而sgroupuser记录是组中的用户,因此在sgroupuser中不一定有数据.需要使用Left ...

  2. LINQ语法类似于SQL的语法

    LINQ语法类似于SQL的语法如下, Models.BookStoreEntities 是从添加新建项中的数据--->ADO.NET实体数据模型--->从数据库生成--->使用5.0 ...

  3. C#语言基础-LINQ语法

    C#语言基础-LINQ语法 写这两篇文章的目的是为了备忘. C#语言在大学读书时候学过.当时做过一些东西.但是由于从事的主要工作和C#无关便忘记了. 近来公司增加了Unity业务. 写Unity主要是 ...

  4. perl基本语法--转载

    http://www.cnblogs.com/zhtxwd/archive/2012/03/06/2381585.html 本文介绍从变量类型.操作运算符.控制叙述.子程序.I/O和档案处理. Reg ...

  5. 快速解读linq语法

    在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  6. [导入]WINRAR 命令行语法[转载]

    WINRAR 命令行语法 [ 2006-10-13 23:33:44 | 作者: 碳酸氢钠 ] Font Size: Large | Medium | Small 语法:RAR <命令> ...

  7. WINRAR 命令行语法[转载]

    WINRAR 命令行语法 [ 2006-10-13 23:33:44 | 作者: 碳酸氢钠 ] Font Size: Large | Medium | Small 语法:RAR <命令> ...

  8. LINQ语法之into

    2019独角兽企业重金招聘Python工程师标准>>> 可以使用 into 上下文关键字创建一个临时标识符,以便将 group.join 或 select 子句的结果存储到新的标识符 ...

  9. 马克飞象 导出html,markdown 基本语法(转载)(示例代码)

    最近感觉一直使用富文本编辑器写东西,感觉有点烦,所以就试着学习了一下简单的markdown编辑器的使用 支持原创 主要分为区块元素和区段元素. 区块元素 1.段落和换行 一个 Markdown 段落是 ...

最新文章

  1. Bi-LSTM-CRF for Sequence Labeling
  2. Centos6.3下利用changepassword修改samba账户密码
  3. 丽水松阳计算机职业高中学校,丽水松阳职专
  4. MySQL-基本的SELECT语句
  5. 什么是编译型和解释型语言?
  6. ABAP 的历史,现在,和未来的讨论
  7. 官方实锤!程序员都是农民工?
  8. 一波情人节海报温暖来袭,注定与众不同
  9. Sentinel降级_异常数_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0041
  10. springboot 2.4.4java.sql.SQLException Access denied for user ‘root‘@‘localhost‘ (using password YES)
  11. LaTeX Cookbook by Eric
  12. jsx怎么往js里传参数_JSX语法使用详解——终极版
  13. Cesium:加载json数据
  14. PLC控制三相异步电动机正反转系列实训QY-DG800E
  15. WIN10专业版如何调整系统字体大小
  16. 用Python写一个双人对战的小游戏;
  17. 【沧海拾昧】微机原理:存储器系统
  18. mate7 android 6 root权限管理,华为Mate7 Root权限怎么获取 华为Mate7 Root权限获取教程【详解】...
  19. 面试问到这个我直接蒙了,你呢?
  20. 计算机兴趣小组活动实施方式,信息技术兴趣小组活动总结范文(通用5篇)

热门文章

  1. vrchat模型房_VRChat之blender教程
  2. Facebook产品的开发流程
  3. TIA博途中触摸屏仿真时画面字体变大,超出范围的处理方法
  4. B2B2C 商业模式
  5. 编译原理学习笔记(十七)~自上而下语法分析之构造预测分析表
  6. 精华文章置顶--CDC系列之一 :使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能...
  7. 数据仓库系列文章一:浅谈数仓设计
  8. 大话商学院(3)--有一种网络效应叫赢者通吃
  9. 如何从视频中分离音频/提取音频/提取视频
  10. STM32学习笔记——通用定时器的PWM介绍及配置