当前位置: 首页 > article >正文

C#中Linq的使用

C#中的 LINQ 常用方法详解

在 C#中,LINQ(Language Integrated Query)提供了一系列强大的静态方法,这些方法可以通过扩展方法的形式应用于实现了IEnumerable<T>接口的数据集合。下面将详细介绍一些常用的 LINQ 方法。

一、Select

  • 用途:将序列中的每个元素投影到新的形式。
  • 示例
var numbers = new[] { 1, 2, 3, 4, 5 };
var squares = numbers.Select(n => n * n);

二、Where

  • 用途:根据指定的条件过滤序列中的元素。
  • 示例
var evens = numbers.Where(n => n % 2 == 0);

三、SelectMany

  • 用途:将序列中的每个元素投影到序列序列,然后将结果序列合并为一个序列。通常用于扁平化嵌套集合。
  • 示例:(假设存在嵌套集合的情况)
var nestedLists = new List<List<int>>
{
    new List<int> { 1, 2 },
    new List<int> { 3, 4 }
};
var flattened = nestedLists.SelectMany(list => list);

四、OrderBy / OrderByDescending

  • 用途:对序列的元素进行排序。
  • 示例
var sortedNumbers = numbers.OrderBy(n => n);
var sortedDescending = numbers.OrderByDescending(n => n);

五、ThenBy / ThenByDescending

  • 用途:在已排序的序列基础上进行次级排序。
  • 示例
var sortedNumbers = numbers.OrderBy(n => n % 2).ThenBy(n => n);

六、GroupBy

  • 用途:根据键对序列中的元素进行分组。
  • 示例
var groupedNumbers = numbers.GroupBy(n => n % 2);

七、Join

  • 用途:基于键匹配将两个序列的元素进行关联。
  • 示例:(假设存在两个可关联的集合)
var left = new[] { new { Id = 1, Name = "A" }, new { Id = 2, Name = "B" } };
var right = new[] { new { Id = 1, Value = "X" }, new { Id = 2, Value = "Y" } };
var joined = left.Join(right, l => l.Id, r => r.Id, (l, r) => new { l.Name, r.Value });

八、Any

  • 用途:检查序列中是否存在至少一个满足条件的元素。
  • 示例
bool hasEven = numbers.Any(n => n % 2 == 0);

九、All

  • 用途:检查序列中的所有元素是否都满足条件。
  • 示例
bool allPositive = numbers.All(n => n > 0);

十、Contains

  • 用途:确定序列是否包含指定的元素。
  • 示例
bool containsFive = numbers.Contains(5);

十一、Concat

  • 用途:连接两个序列,返回包含两个序列中所有元素的新序列。
  • 示例
var firstSequence = new[] { 1, 2, 3 };
var secondSequence = new[] { 4, 5, 6 };
var combined = firstSequence.Concat(secondSequence);

十二、Union

  • 用途:返回两个序列的并集,去除重复元素。
  • 示例
var uniqueCombined = firstSequence.Union(secondSequence);

十三、Intersect

  • 用途:返回两个序列的交集,即两个序列中都存在的元素。
  • 示例
var commonElements = firstSequence.Intersect(secondSequence);

十四、Except

  • 用途:返回第一个序列中存在但第二个序列中不存在的元素。
  • 示例
var difference = firstSequence.Except(secondSequence);

十五、Count

  • 用途:返回序列中的元素数量,可选地应用条件。
  • 示例
int count = numbers.Count();
int evenCount = numbers.Count(n => n % 2 == 0);

十六、Sum, Average, Min, Max

  • 用途:计算数值序列的总和、平均值、最小值和最大值。
  • 示例
double average = numbers.Average();
int sum = numbers.Sum();
int min = numbers.Min();
int max = numbers.Max();

十七、First / FirstOrDefault

  • 用途:返回序列中的第一个元素,如果序列为空,则First抛出异常,FirstOrDefault返回默认值。
  • 示例
int firstNumber = numbers.First();
int firstOrDefaultNumber = numbers.FirstOrDefault();

十八、Single / SingleOrDefault

  • 用途:返回序列中的单个元素,并确保序列中只有一个元素满足条件;否则抛出异常。
  • 示例:(用于确保查询结果唯一)
var uniqueElement = numbers.Single(n => n == 4);
var uniqueOrDefaultElement = numbers.SingleOrDefault(n => n == 4);

十九、ElementAt / ElementAtOrDefault

  • 用途:返回序列中指定位置的元素,如果位置无效,则ElementAt抛出异常,ElementAtOrDefault返回默认值。
  • 示例
int thirdNumber = numbers.ElementAt(2);
int thirdOrDefaultNumber = numbers.ElementAtOrDefault(2);

二十、Skip / Take

  • 用途:跳过指定数量的元素或获取指定数量的元素。通常用于分页。
  • 示例
var paginated = numbers.Skip(5).Take(10);

http://www.kler.cn/a/487398.html

相关文章:

  • 腾讯云AI代码助手编程挑战赛——贪吃蛇小游戏
  • AIA - APLIC之三(附APLIC处理流程图)
  • C# 实现 gRPC 进程间通讯:两台设备的数据交换之道
  • Qt 5.14.2 学习记录 —— 오 信号与槽机制(2)
  • 使用Llama 3.1创建合成数据集以调优你的大型语言模型
  • [项目实战2]贪吃蛇游戏
  • 【学习笔记】数据结构(十二)
  • STM32-RTC实时时钟
  • uniapp:钉钉小程序需要录音权限及调用录音
  • 工作中Excel技巧整理
  • Android GSI (Generic System Image)
  • 2025年01月09日Github流行趋势
  • 在Rust中实现Drop trait的注意事项有哪些?
  • IP属地与IP地址:联系与区别的深度剖析
  • 【网络协议】IPv4 地址分配 - 第二部分
  • 分布式锁 Redis vs etcd
  • nmap命令详解:网络安全扫描的利器
  • CSS语言的数据库交互
  • Nginx | 解决 Spring Boot 与 Nginx 中的 “413 Request Entity Too Large“ 错误
  • WebRTC:构建实时通信应用的利器
  • 音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现
  • 超简单,使用Kube-Vip实现K8s高可用VIP详细教程
  • Attention计算中的各个矩阵的维度都是如何一步步变化的?
  • SQL UNION 操作符
  • 【Linux 之一 】Linux常用命令汇总
  • Redis数据库笔记——Cluster集群模式