活代码LINQ——07
来源说明:https://blog.csdn.net/sha574810590/article/details/40738069
在LINQ中,数据源和查询结果实际上都是IEnumerable<T>或IQueryable<T>类型对象,所以可以通过使用普通对象的形式(调用方法、使用属性等)对数据源进行查询或使用查询结果数据。
1.IEnumerable<T>接口
IEnumerable<T>泛型接口支持在制定数据集合上进行迭代操作。它定义了一组扩展方法,用来对数据集合中的元素进行遍历、过滤、排序、搜索等操作。在LINQ中,数据源实际上是实现了接口IEnumerable<T>的类,通过select子句返回的查询结果页是一个实现了IEnumerable<T>的类。
在.NET类库中,IEnumerable<T>接口提供了大量与查询相关的方法。这些方法实际上是以扩展方法的形式定义,但是由于它的作用类型也为IEnumerable<T>接口,所以使用上和成员方法很类似。
IEnumerable<T>接口主要成员
|
成员 |
功能 |
| Aggregate | 对序列应用累加器函数,可以指定累加方法 |
| Sum |
计算序列中所有元素的和,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法 |
| Average |
计算序列中所有元素的平均值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法 |
| Max | 计算序列中所有元素的最大值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法 |
| Min | 计算序列中所有元素的最小值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法 |
| All | 检查是否序列中所有元素都满足条件,可以指定条件判断方法。如果所有元素都满足条件返回True,否则返回False |
| Any | 检查序列中是否有任何一个元素满足条件,可以指定条件的判断方法。如果有一个以上(含一个)元素满足条件返回True,否则返回False |
| Contains | 检查数据系列中是否包含特定的元素,可以指定相等比较方法 |
| Count | 返回序列中满足指定条件的元素的数量,可以指定条件判断方法 |
| LongCount | 返回序列中满足指定条件的元素的长数量,可以指定条件判断方法 |
| Cast | 将IEnumerable中的元素转换为指定的数据类型 |
| DefaultIfEmpty | 返回序列中指定位置的元素。如果序列为空,则返回默认的元素值 |
| ElementAt | 返回序列中指定索引处的元素 |
| ElementAtOrDefault | 返回序列中指定索引处的元素。如果序列为空,则返回默认值 |
| First | 返回序列中满足指定条件的第一个元素,可以指定条件判断方法 |
| FirstOrDefault | 返回序列中满足指定条件的第一个元素。如果不存在则返回默认值,也可以指定条件判断方法 |
| Last | 返回序列中满足指定条件的最后一个元素,可以指定条件判断方法 |
| LastOrDefault | 返回序列中满足指定条件的最后一个元素。如果不存在则返回默认值,也可以指定条件判断方法 |
| Single | 返回序列中满足指定条件的唯一元素。如果不止一个元素满足条件会引发一场,可以指定条件判断方法 |
| SingleOrDefault | 返回序列中满足指定条件的唯一元素。如果不存在则返回默认值,如果不止一个元素满足条件会引发一场,可以指定条件判断方法 |
| Reverse | 反转序列中元素的顺序 |
| Distinct | 返回序列中不重复的元素的集合,可以指定相等比较方法 |
| Concat | 连接两个序列,直接首尾相连。返回结果可能存在重复数据 |
| Except | 获取两个元素集合的差集,可以指定相等比较方法 |
| Intersect | 获取两个元素集合的交集,可以指定相等比较方法 |
| Union | 获取两个元素集合的并集,可以指定相等比较方法 |
|
SequenceEqual |
比较两个序列是否相等,可以指定相等比较方法 |
| Where | 根据制定条件对集合中元素进行筛选,返回满足条件的元素集合 |
| Skip | 跳过序列中指定数量的元素,然后返回剩余的元素 |
| SkipWhile | 跳过序列中满足指定条件的元素,然后返回剩余的元素,可以指定条件判断方法 |
| Take | 从序列的开头返回指定数量的连续元素 |
| TakeWhile | 返回从序列开始的满足指定条件的连续元素,可以指定条件判断方法 |
| ToArray | 从IEnumerable<T>创建一个数组 |
| ToList | 从IEnumerable<T>创建一个List<T> |
从上表可以看出,IEnumerable<T>提供的方法包括数值运算(Sum、Min、Max、Average)、元素数量(Count、LongCount)、取值(First、Last、ElementAt等)、提取子集(Skip、SkipWhile、Take、TakeWhile、)集合操作(Reverse、Concat、Distinct、Except、Intersect、Union、SequenceEqual等)。这些方法提供了LINQ所需要的所有操作。
注意:
IEnuerable<T>继承自IEnumerable<T>接口,所以它也包含IEnumerable接口的所有方法,所以还包括Select()、SelectMany()、Repeat()等方法。
另外,IQuery<T>接口从IEnumerable<T>派生而来,通常也可以作为数据源使用,它的使用和IEnumerable<T>类似。
1.Aggregate(聚合)的用法:
简介:适用于集合的一个或多个聚合函数。 标准聚合函数都All, Any, Average, Count, LongCount, Max, Min,和Sum函数。
Module Module1
Sub Main()
Dim numbers1 As Integer() = {1, 2, 3, 4, 5}
Dim query1 As Integer = Aggregate num In numbers1 Into Sum(num)
Console.WriteLine("Sum = " & query1) ‘显示结果为 Sum = 15
Dim numbers2 As Decimal() = {1.9, 2, 8, 4, 5.7, 6, 7.2, 0}
Dim query2 = Aggregate num In numbers2 Into Sum()
Console.WriteLine("SumSalary = " & query2) ‘显示结果为 SumSalary = 34.8
End Sub End Module
运行结果:

2.Aggregate(聚合)数学运算:
Module Aggregate_数学运算
Sub Main()
Dim numbers As Integer() = {1, 3, 5, 6, 3, 9, 7} Dim numberTotal As Integer = Aggregate num In numbers Into Sum(num)
Dim numberMax As Integer = Aggregate num In numbers Into Max(num)
Dim numberAverage As Double = Aggregate num In numbers Into Average(num)
Dim numberCount As Integer = Aggregate num In numbers Into Count()
Dim numberMin As Integer = Aggregate num In numbers Into Min(num)
Console.WriteLine("Sum = " & numberTotal & vbCrLf & _
"Max = " & numberMax & vbCrLf & _
"Average = " & numberAverage & vbCrLf & _
"Count = " & numberCount & vbCrLf & _
"Min = " & numberMin)
End Sub
End Module
运算结果:

3.Distinct分句的用法
'将list列表的元素以集合的形式传给IEnumerable接口
Module ListCollection
Sub Main()
Dim items As New List(Of String)
items.Add("red")
items.Insert(0, "yellow")
items.Add("green")
items.Add("yellow")
Dim delChongfu = _
From element In items _
Select element _
Distinct '若有相同的值,保留一个值,删除其他的值
Display(delChongfu)
End Sub ' Main Sub Display(ByVal items As IEnumerable)
For Each item In items
Console.Write(" {0}", item)
Next
Console.WriteLine()
End Sub
End Module
运行结果(本来有两个yellow,只保留了一个yellow):

来源:https://blog.csdn.net/sha574810590/article/details/40738069
活代码LINQ——07的更多相关文章
- 活代码LINQ——09
一.代码 ' Fig. 9.7: LINQWithListCollection.vb ' LINQ to Objects using a List(Of String). Module LINQWit ...
- 活代码LINQ——06
一.模块代码 ' Fig. 9.4: LINQWithArrayOfObjects.vb ' LINQ to Objects using an array of Employee objects. M ...
- 活代码LINQ——01
序言 此系列的所有代码都是运行在Win 7 64位 + Visual Basic 2008 Express Edition的环境中 之所以学习List集合类,是因为我们先前学习的数组自身的缺陷: 1. ...
- 活代码LINQ——08
一.模块代码 ' Fig. 9.6: ListCollection.vb ' Generic List collection demonstration. Module ListCollection ...
- 活代码LINQ——05
片段代码: ' Exercise 9.3 Solution: Invoice.vb ' Invoice class. Public Class invoide ' declare variables ...
- 活代码LINQ——04
一.主模块代码: 'Fig.4.16:GradeBookTest.vb 'Create and manipulate a GradeBook object;illustrate validation ...
- 活代码LINQ——03
一.主模块代码: 'Fig.4.13:GradeBookTest.vb 'GradeBook constructor used to specify the course name at the 't ...
- 活代码LINQ——02
一.复习基础——属性与实例变量 'Fig. 4.8:GradeBookTest.vb 'Create and manipulate a GradeBook object. Module GradeBo ...
- Linq to EF 与Linq to Object 使用心得
大家都知道Linq既可以用来查询数据库对象(我这里指的是Entity FrameWork里的Model对象),也可以用来查询内存中的IEnumerable对象. 两者单独查询时都不会出现什么问题,不过 ...
随机推荐
- Kali Linux Xfce版美化虚拟机镜像
起因 这两天来学校把硬盘基本全部清空了,所以以前的虚拟机就需要重新安装了. Kali 一直用的是 xfce 版本,至于为什么用这个版本,是因为我感觉 gnome3 在虚拟机上表现欠佳.当然,默认的 g ...
- hdu2844 Coins -----多重背包+二进制优化
题目意思:给出你n种硬币的面额和数量,询问它能够组合成1~m元中的几种情况. 这题如果直接按照完全背包来写的话,会因为每一种硬币的数目1 ≤ Ci ≤ 1000而超时,所以这里需要运用二进制优化来解决 ...
- Qt Designer问题(挖坑)
同时用两个VS的Qt Designer打开.ui文件,关闭Qt Designer之后再打开发现Qt Designer不在打开方式了.要重启VS才行.
- 从零开始 CentOs 7 搭建论坛BBS Discuz_X3.2
由于公司项目需要一个互动平台,可以发起活动,发消息留言,讨论过后发现这竟然是一个论坛的功能. 于是就不打算耗费功夫开发相关功能,直接另外搭一套BBS算球... 一直觉得搭建BBS不是一件难事,目前有很 ...
- 使用Spring MVC实现数据绑定
使用Spring MVC实现数据绑定 ——Spring MVC支持将表单参数自动绑定在映射方法的参数. ①绑定标量数据 前端代码: <form action="${pageContex ...
- C语言--第1次作业
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 经过一周C语言的正式课堂学习,不同于暑期时扒视频囫囵吞枣式学习,林丽老师的讲解详细异常,尽管已经学习了一部分内 ...
- 分页查询最好加排序(order by)
昨天,与外部化系统对接时,发现有一个数据一直咩有集成到,双方各自排查了自己系统的代码,都觉得逻辑非常简单,无法就是一个分页查询而已. 问题就出在这个分页查询上. 为了说明当时问题发生的情景,我模拟了一 ...
- VS code 推荐插件
vs code 中eslint语法检测,保存即可格式化 具体查看:(https://www.jianshu.com/p/23a5d6194a4b) { // vscode默认启用了根据文件类型自动设置 ...
- Java分布式锁看这篇就够了
### 什么是锁? 在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量. 而同步的本质是通过锁来实现的 ...
- jfinal afterJFinalStart中执行长久循环操作的解决方案:创建新线程
很多时候,需要在jfinal中afterJFinalStart方法中,写一些需要一直循环运行的程序,做一些循环操作.但是在afterJFinalStart中,执行时间过长的话,会导致整个站点启动超时. ...