LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat
七、聚合操作符
聚合函数将在序列上执行特定的计算,并返回单个值,如计算给定序列平均值、最大值等。共有7种LINQ聚合查询操作符:Aggregate、Average、Count、LongCount、Max、Min和Sum。
1. Aggregate
Aggregate操作符对集合值执行自定义聚合运算。例如,需要列出所有产品类别清单,每个类别名称之间用顿号连接。以下的代码演示了这一过程:
//方法语法
var q =
db.Categories
.Select(c => c.CategoryName)
.ToList()
//.ToArray()
.Aggregate((current, next) => String.Format("{0}、{1}", current, next));
从数据库中查询的结果集合:
Aggregate后得到的结果

2. Average
求集合中元素的平均值,返回值类型double
var list = db.Order_Details
.GroupBy(o => o.OrderID)
.Select(g => new { key = g.Key, avg = g.Average(x => x.UnitPrice) })
.ToList(); 生成的sql: SELECT
[GroupBy1].[K1] AS [OrderID],
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
[Extent1].[OrderID] AS [K1],
AVG([Extent1].[UnitPrice]) AS [A1]
FROM [dbo].[Order Details] AS [Extent1]
GROUP BY [Extent1].[OrderID]
) AS [GroupBy1]
返回的结果:
3. Count
求集合中元素的个数,返回值类型Int32
var list = db.Order_Details
.GroupBy(o => o.OrderID)
.Select(g => new { key = g.Key, count = g.Count() })
.ToList(); 生成的sql: SELECT
[GroupBy1].[K1] AS [OrderID],
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
[Extent1].[OrderID] AS [K1],
COUNT() AS [A1]
FROM [dbo].[Order Details] AS [Extent1]
GROUP BY [Extent1].[OrderID]
) AS [GroupBy1]
4. LongCount
求集合中元素的个数,返回值类型Int64
5. Max
求集合中元素的最大值
var list = db.Order_Details
.GroupBy(o => o.OrderID)
.Select(g => new { key = g.Key, max = g.Max(x => x.UnitPrice) })
.ToList(); 生成的sql: SELECT
[GroupBy1].[K1] AS [OrderID],
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
[Extent1].[OrderID] AS [K1],
MAX([Extent1].[UnitPrice]) AS [A1]
FROM [dbo].[Order Details] AS [Extent1]
GROUP BY [Extent1].[OrderID]
) AS [GroupBy1]
6. Min
求集合中元素的最小值
7. Sum
求集合中元素的和
八、集合操作符
LINQ 中的集合操作符是指根据相同或不同集合(或集)中是否存在等效元素来生成结果集的查询操作,一共有4种:
|
方法名 |
说明 |
|
Distinct |
从集合移除重复值。 |
|
|
|
|
Except |
返回差集,差集是指位于一个集合但不位于另一个集合的元素。 |
|
|
|
|
Intersect |
返回交集,交集是指同时出现在两个集合中的元素。 |
|
|
|
|
Union |
返回并集,并集是指位于两个集合中任一集合的唯一的元素。 |
|
|
|
使用方式均为“集合1.方法名(集合2)”,返回值为运算结果的集合,这里就不演示了。
九、生成操作符
生成是指创建新的值序列。
1. Empty
Empty操作符返回一个指定类型的空集合。这里的空不是null,而是元素数量为0的集合。以下的示例演示了如何创建一个IEnumerable<int>类型的空集合:
var q = Enumerable.Empty<int>();

2. DefaultIfEmpty
DefaultIfEmpty将空集合替换为具有默认值的单一实例集合。执行此方法获得的集合将至少含有一个元素,这是因为DefaultIfEmpty方法需要两个参数,第一个参数是一个泛型集合,第二个参数是相应类型的单个元素,如果第一个参数中不含有任何元素,它将返回第二个参数指定的单个元素。如果你使用了DefaultIfEmpty方法的重载方法DefaultIfEmpty<T>(IEnumerable<T> array),如果指定的array集合为空,那么将返回一个类型为T,值为null的单个对象。以下的代码演示了这一过程:
//方法语法
var q =
Enumerable.DefaultIfEmpty
(
db.Employees
.Where(e => e.FirstName.StartsWith("Aaf")) //更改此处的条件可获得不同的集合,当前条件结果集合为空,所以返回后面的实体对象
, new Models.Employee() { FirstName = "Sunny D.D" }
).ToList();
3. Range
Range操作符用于生成指定范围内的整数的序列。它需要两个参数,第一个参数是序列开始的整数值,第二个参数是序列中整数的数量。下面的示例演示了使用Range操作符来生成从0到9的整数序列:
var q = Enumerable.Range(, );

4. Repeat
Repeat操作符用于生成包含一个重复值的集合。它需要两个参数,第一个参数是任意类型的元素,第二个参数是生成的序列中所包含此元素的数量。下面的示例演示了使用Repeat来生成一个包含10个0的序列:
var q = Enumerable.Repeat(, );

LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat的更多相关文章
- Linq 标准查询操作符三
本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰 ...
- LINQ 标准查询操作符
本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰 ...
- LINQ标准查询操作符详解(转)
一. 关于LINQ LINQ 英文全称是“Language-Integrated Query”,中文为“语言集成查询”,它是微软首席架构师.Delphi 之父和C# 之父——Anders ...
- Linq标准查询操作符
Linq的出现让代码简洁了不少.之前在项目中基本都在使用它,但是没有完整的整理过,今天借这个周末,将其进行整理,方便后期对其的使用.Linq的操作可以分为聚合,连接,转换,元素操作符,相等操作,生成 ...
- 【LINQ标准查询操作符总结】之聚合操符
C# 中的LINQ 提供了两种操作方式,查询表达式和查询操作符,所有的查询表达式都有对应的查操作符类替代,查询表达式有点“类” SQL,在代码中写SQL,总觉得不够“优雅”,使用查询操作符就显得“优 ...
- LINQ标准查询操作符(四) —AsEnumerable,Cast,OfType,ToArray,ToDictionary,ToList,ToLookup,First,Last,ElementAt
十.转换操作符 转换操作符是用来实现将输入对象的类型转变为序列的功能.名称以“As”开头的转换方法可更改源集合的静态类型但不枚举(延迟加载)此源集合.名称以“To”开头的方法可枚举(即时加载)源集合并 ...
- LINQ标准查询操作符(五)
十二.相等操作符 如果两个序列的对应元素相等且这两个序列具有相同数量的元素,则视这两个序列相等. SequenceEqual方法通过并行地枚举两个数据源并比较相应元素来判断两个序列是否相等.如果两个序 ...
- LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、
四.联接操作符 联接是指将一个数据源对象与另一个数据源对象进行关联或者联合的操作.这两个数据源对象通过一个共同的值或者属性进行关联. LINQ有两个联接操作符:Join和GroupJoin. 1. J ...
- LINQ标准查询操作符(一)——select、SelectMany、Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse
一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: //查询语法 var query = fro ...
随机推荐
- linux 查看程序是否运行
命令格式:ps -ax|grep program_name 如查看包含python的程序是否运行: ps -ax|grep python ? Sl : python ToServer.py pts/ ...
- leetcode:Reverse Bits
Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...
- vi 每日练习
vi 1. 4 空格 2. ctrl + b, ctrl + f 3. 0 $ 4. 1G gg G 5. 10G 6. 10 回车 7. / ? 8. ...
- 基于jQuery的日历插件
上个星期看到同事做一个有关日历提醒功能的需求,为了找个插件也是费了不少心思,然后刚好有时间就试着写了一个简单demo 来看下最终效果图吧: 是长得丑了一点,不要吐槽我-.- 首先来说说这个日历主要的制 ...
- 使用Spring Session做分布式会话管理
在Web项目开发中,会话管理是一个很重要的部分,用于存储与用户相关的数据.通常是由符合session规范的容器来负责存储管理,也就是一旦容器关闭,重启会导致会话失效.因此打造一个高可用性的系统,必须将 ...
- jupyterhub
pkill jupyterhub #激活python环境 pyenv activate jupyterhub #启动jupyterhub /fly/start_jupyterhub.sh cd ~/r ...
- 函数式宏定义用do...while(0)的好处
函数式宏定义经常写成这样:<pre lang="c" escaped="true">#define device_init_wakeup(dev, ...
- vm虚拟机挂载usb
首先得保证能在VM里看到usb设备,如图
- php 格式化数字 位数不足前面加0补足
本文引用自 http://www.fengfly.com/plus/view-62827-1.html 补0: <?php $var = sprintf("%03d", 12 ...
- MYSQL建立索引需要注意几点
1.建立索引的时机:若表中的某字段出现在select.过滤.排序条件中,为该字段建立索引是值得的.2.对于like '%xxx'的模糊查询,普通的索引是无法满足的,需要建立全文索引.3.对于有多个条件 ...



