C#高级编程2
LINQ操作符总结
分类 |
操作符 |
说明 |
条件类 |
Where |
用lambda表达式作为查询条件names.Where(n => n.StartsWith("J")) |
OfType<TResult> |
按照数据类型进行查询, |
|
选择类 |
Select |
names.Where(n => n.StartsWith("J")).OrderBy(n => n).Select(n => n) |
SelectMany |
二级选择,从中间选择结果中进行进一步选择 |
|
排序类 |
OrderBy |
按照某个字段或属性进行排序 |
ThenBy |
二级排序,先按照某个字段进行排序,然后按照另一个字段再次裴谞 |
|
OrderByDecending |
降序排序 |
|
ThenByDecending |
二级排序,降序 |
|
Reverse |
反转顺序,倒序 |
|
合并类 |
Join |
合并不直接相关的集合 |
GroupJoin |
连接两个集合,组合其结果 |
|
分组类 |
GroupBy |
分组from book in Books group book by book.Publisher into grouping |
ToLookup |
通过创建一对多字典,来组合元素 |
|
布尔类 |
Any |
任意一个元素满足条件,就返回true |
All |
所有元素均满足条件,才返回true |
|
Contains |
包含某个元素,就返回true |
|
分区类 |
Take |
获得指定数量的结果 |
Skip |
跳过指定数量的结果 |
|
TakeWhile |
获取满足指定条件的,指定个数的结果 |
|
SkipWhile |
跳过满足指定条件的,指定个数的结果 |
|
复合类 |
Distinct |
删除重复元素,去重 |
Union |
合并两个集合并去重,相当于先并集再去重 |
|
Intersect |
交集 |
|
Zip |
并集 |
|
Except |
差集 |
|
索引类 |
First |
满足条件的第一个元素 |
FirstOrDefault |
满足条件的第一个元素,如果找不到,就返回元素的默认值 |
|
Last |
满足条件的最后一个元素 |
|
LastOrDefault |
满足条件的最后一个元素,如果找不到,就返回元素的默认值 |
|
ElementAt |
按照索引查找元素 |
|
ElementAtOrDefault |
按照索引查找元素,如果找不到,就返回元素的默认值 |
|
Single |
只返回一个满足条件的元素,如果找到多个,就抛出异常 |
|
SingleOrDefault |
只返回一个满足条件的元素,如果找不到,就返回元素的默认值 |
|
统计类 |
Count |
元素个数 |
Sum |
所有元素求和var query = nums.Sum(i => (long)i); |
|
Min |
最小值 |
|
Max |
最大值 |
|
Average |
平均值 |
|
Aggregate |
总计 int[] numbers = new int[] { 1, 2, 3, 4 }; |
|
转换类 |
ToArray |
转换为数组 |
AsEnumerable |
转换为IEnumerable子类 |
|
ToList |
转换为IList子类 |
|
ToDictionary |
转换为IDictionary子类 |
|
Cast<TResult> |
转换为指定类型 |
|
初始类 |
Empty |
生成一个空集合 |
Range |
生成一系列数字 |
|
Repeate |
生成一个元素都是同一个值的集合 |
Linq查询的延迟执行
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleCore230207
{
class Program
{
static void Main(string[] args)
{
DeferredQuery();
DeferredQuery2();
}
//延迟查询函数 Linq表达式形式
static void DeferredQuery()
{
//定义一个集合
var names = new List<string> { "Bert", "Jack", "Rose", "Tom" };
//定义Linq表达式 此时仅仅定义了表达式,而未执行
//Linq表达式在遍历时才执行
//{System.Linq.OrderedEnumerable<string, string>}
var namesWithJ = from n in names where (n.StartsWith("J")) orderby n select n;
Console.WriteLine("第1次遍历:");
//遍历时,执行Linq表达式
foreach (var item in namesWithJ)
{
Console.WriteLine(item);
}
names.Add("Json");
names.Add("Jerry");
names.Add("Job");
Console.WriteLine("第2次遍历:");
//遍历时,再次执行Linq表达式,此次输出更新集合上的查询结果
foreach (var item in namesWithJ)
{
Console.WriteLine(item);
}
}
//扩展方法式的 延迟查询
static void DeferredQuery2()
{
//定义一个集合
var names = new List<string> { "Bert", "Jack", "Rose", "Tom" };
//扩展方法形式的Linq查询
//Linq查询的扩展方法在遍历时才执行
//namesWithJ的数据类型是枚举器{System.Linq.Enumerable.SelectIPartitionIterator<string, string>}
var namesWithJ = names.Where(n => n.StartsWith("J")).OrderBy(n => n).Select(n => n);
Console.WriteLine("第1次遍历:");
//遍历时,执行Linq表达式
foreach (var item in namesWithJ)
{
Console.WriteLine(item);
}
names.Add("Json");
names.Add("Jerry");
names.Add("Job");
Console.WriteLine("第2次遍历:");
//遍历时,再次执行Linq表达式,此次输出更新集合上的查询结果
foreach (var item in namesWithJ)
{
Console.WriteLine(item);
}
}
//两种方法的输出结果相同;表达式形式和扩展方法形式的Linq查询,是等价的;
//第1次遍历:
//Jack
//第2次遍历:
//Jack
//Jerry
//Job
//Json
}
}
#end
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击