LINQ to Entities 查询中的标准查询运算符
投影和筛选方法
投影指的是转换的结果集到所需的窗体中的元素。 例如,可以从结果集中的每个对象投影所需的属性子集,可以投影一个属性并对其执行数学计算,也可以从结果集投影整个对象。 投影方法有 Select 和 SelectMany。
筛选指限制结果集包含与指定的条件匹配的元素的操作。 筛选方法为 Where。
LINQ to Entities 中支持大多数投影和筛选方法的重载,除了那些接受位置参数的方法。
联接方法
在面向相互之间没有可导航关系的数据源的查询中,联接是一项重要的操作。 联接两个数据源就是将一个数据源中的对象与另一个数据源中具有相同属性的对象相关联。 联接方法有 Join 和 GroupJoin。
大多数联接方法的重载都受支持,除了使用 IEqualityComparer<T> 的方法。 这是因为比较器不能转换为数据源。
集方法
LINQ 中的集运算是根据包含或不包含本集合或其他集合(或集)中的等价元素,对其结果集执行查询运算。 集方法有 All、Any、Concat、Contains、DefaultIfEmpty、Distinct、EqualAll、Except、Intersect 和 Union。
LINQ to Entities 中支持大多数集方法的重载,只是与 LINQ to Objects 在行为上有所不同。 但是,并不支持使用 IEqualityComparer<T> 的集方法,原因是比较器不能转换为数据源。
排序方法
排序是指基于一个或多个属性对结果集中的元素排序。 指定多个排序条件可在组中消除并列。
大多数排序方法的重载都受支持,除了使用 IComparer<T> 的方法。 这是因为比较器不能转换为数据源。排序方法有 OrderBy、OrderByDescending、ThenBy、ThenByDescending 和 Reverse。
由于查询在数据源上执行,因此排序行为与在 CLR 中执行的查询可能有所不同。 这是因为可以在数据源中设置诸如区分大小写排序、日本文字排序和 null 值排序等排序选项。 根据数据源的不同,这些排序选项可能会产生与 CLR 中不同的结果。
如果在多个排序操作中指定相同的关键字选择器,则会产生重复排序。 此举无效并将引发异常。
分组方法
分组是指将数据分到不同的组,使每组中的元素拥有公共的属性。 分组方法为 GroupBy。
大多数分组方法的重载都受支持,除了使用 IEqualityComparer<T> 的方法。 这是因为比较器不能转换为数据源。
分组方法使用对关键字选择器的不同子查询映射到数据源。 关键字选择器比较子查询使用数据源的语义执行,其中包括与比较 null 值相关的问题。
聚合方法
聚合运算从值的集合中计算出单个值。 例如,从一个月累计的每日温度值计算出日温度平均值就是一个聚合运算。 聚合方法有 Aggregate、Average、Count、LongCount、Max、Min 和 Sum。
大多数聚合方法的重载都受支持。 对于与 null 值有关的行为,聚合方法使用数据源语义。 根据使用的后端数据源的不同,聚合方法在涉及 null 值时的行为也可能会有所不同。 使用数据源语义的聚合方法行为与 CLR 方法的预期行为也可能有所不同。 例如,SQL Server 上的 Sum 方法的默认行为是忽略所有 null 值,而不是引发异常。
聚合导致的任何异常(如 Sum 函数的溢出)都会在查询结果具体化的过程中作为数据源异常或实体框架异常引发。
对于涉及序列计算的方法,如 Sum 和 Average,真正的计算将在服务器上执行。 因此,服务器上可能发生类型转换和精度损失,其结果与使用 CLR 语义预期得出的结果可能有所不同。
下表显示了聚合方法对 null 值和非 null 值的默认行为:
| 方法 | 无数据 | 全部 null 值 | 部分 null 值 | 无 null 值 |
|---|---|---|---|---|
Average |
返回 Null。 | 返回 Null。 | 返回序列中非 null 值的平均值。 | 计算数值序列的平均值。 |
Count |
返回 0 | 返回序列中 null 值的个数。 | 返回序列中的 null 值和非 null 值个数。 | 返回序列中的元素数。 |
Max |
返回 Null。 | 返回 Null。 | 返回序列中非 null 值的最大值。 | 返回序列中的最大值。 |
Min |
返回 Null。 | 返回 Null。 | 返回序列中非 null 值的最小值。 | 返回序列中的最小值。 |
Sum |
返回 Null。 | 返回 Null。 | 返回序列中非 null 值的和。 | 计算数值序列的和。 |
类型方法
在 Entity Framework 上下文中支持处理类型转换和测试的两个 LINQ 方法。 这就意味着仅支持映射到相应 Entity Framework 类型的类型。 有关这些类型的列表,请参阅概念模型类型 (CSDL)。 类型方法有 Convert 和 OfType。
对于实体类型支持 OfType。 对概念模型基元类型支持 Convert。 还支持 C# 的 is 和 as 方法。
分页方法
分页操作从序列中返回单个元素或多个元素。 支持的分页方法为First, FirstOrDefault, Single, SingleOrDefault, Skip,并Take。
大量的分页方法不支持,原因可能是不能将函数映射到数据源或缺乏隐式排序数据源上的集。 返回默认值的方法仅限于默认值为 null 的概念模型基元类型和引用类型。 对空序列执行的分页方法将返回 null。
LINQ to Entities 查询中的标准查询运算符的更多相关文章
- Linq to BBJECT之非延时标准查询操作符
非延时标准查询操作符是指不具备延时查询特性的标准查询操作符,这些操作符一般用于辅助延时标准查询操作符使用. 1.ToArray操作符 ToArray操作符用于将一个输入序列转换成一个数组. 方法原型: ...
- Linq to Object之非延迟标准查询操作符
非延时标准查询操作符是指不具备延时查询特性的标准查询操作符,这些操作符一般用于辅助延时标准查询操作符使用. 1.ToArray操作符 ToArray操作符用于将一个输入序列转换成一个数组. 方法原型: ...
- Sql中联合查询中的”子查询返回的值不止一个“的问题
在子查询中,如果想实现如下的功能: select lib,count(*),select sum(newsNo) from Table1 group by lib from Tabel1 T1,Tab ...
- 在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。
转载https://www.cnblogs.com/zhang-bo/p/9138151.html 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建 ...
- 2018.11.13 Hibernate 中数据库查询中的Criteria查询实例
Criteria是面向对象的无语句查询 Demo.java package com.legend.b_criteria; import java.util.List; import org.hiber ...
- Django: ORM查询中使用or查询
先引入Q,(原名就叫Q) from django.db.models import Q page_user = User.objects.filter(Q(member_code__contains= ...
- mysql 模糊查询中包含特殊字符查询
- .NET中那些所谓的新语法之四:标准查询运算符与LINQ
开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50 ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
随机推荐
- 安装 sass 文档
为什么使用Sass 作为前端(html.javascript.css)的三大马车之一的css,一直以静态语言存在,HTML5火遍大江南北了.javascript由于NODE.JS而成为目前前后端统一开 ...
- 利用U盘安装Redhat-server-Linux-7.1
利用U盘安装Redhat-server-Linux-7.1 [原]红帽 Red Hat Linux相关产品iso镜像下载[百度云]
- Python实践练习:将一个文件夹备份到一个 ZIP 文件
题目 项目要求:假定你正在做一个项目,它的文件保存在 C:\AlsPythonBook 文件夹中.你担心工作会丢失, 所以希望为整个文件夹创建一个 ZIP 文件, 作为"快照" . ...
- 错误:HttpServlet was not found on the Java
我们在用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not found on t ...
- IntelliJ IDEA—IDEA2018.1激活方式
前言 以前用过2015的版本,后面就没有使用了,现在又重新用起来了,突然发现激活好难,通过网上找破解方式,总算找到了一种可以实现破解的方法了.. 破解方式 本人使用的是使用破解补丁的方式实现破解的,此 ...
- Windows10系统下安装python2和python3双版本
Windows10系统下安装Python3的步骤已经演示过(详见:https://www.cnblogs.com/schut/p/8399195.html),此处不再赘述Python的下载,主要介绍在 ...
- 快速变幻AABB的顶点
[快速变幻AABB的顶点] 当要变幻一个AABB时,可以快速计算变幻后顶点的AABB.当有旋转时,根据8个顶点变幻后的AABB可能会更大. AABB的八个顶点需分别作如下变幻: 注意到为了使 x' 最 ...
- sed的基础应用
sed是一个非交互式的文本编辑器:sed一行一行的处理文件 sed有模式空间(主要活动空间)和缓存空间(辅助空间)两个空间: 模式空间(pattern space)将文件中的一行内容读取到临时缓冲区( ...
- Maven的pom.xml介绍
6.1 简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:可以配置Ma ...
- 通过HttpWebRequest实现模拟登陆
1>通过HttpWebRequest模拟登陆 using System; using System.Collections.Generic; using System.Linq; using S ...