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

C# Linq常用方法

文章目录

  • 前言
  • 基本查询方法
    • Where:用于过滤集合中的元素
    • Select:用于将集合中的每个元素投影(转换)为新形式
    • SelectMany:用于将多个集合“展平”为一个集合
    • OrderBy:用于对集合进行升序排序
    • OrderByDescending:用于对集合进行降序排序
    • ThenBy:用于在已排序的集合上应用次要排序
    • ThenByDescending:用于在已排序的集合上应用次要降序排序
  • 聚合方法
    • Count:返回集合中的元素数量
    • Sum:返回集合中数值类型元素的和
    • Average:返回集合中数值类型元素的平均值
    • Min:返回集合中的最小值
    • Max:返回集合中的最大值
    • Aggregate:对集合进行自定义聚合操作
  • 集合操作
    • Distinct:返回集合中的唯一元素
    • Union:返回两个集合的并集
    • Intersect:返回两个集合的交集
    • Except:返回在第一个集合中存在但不在第二个集合中存在的元素
    • Concat:连接两个或多个集合,并返回一个新的序列
  • 分组与连接
    • GroupBy:根据键对集合进行多级分组
    • Join:根据匹配键连接两个集合
  • 元素操作
    • First:返回集合中的第一个元素
    • FirstOrDefault:返回集合中的第一个元素,如果集合为空则返回默认值
    • Single:返回集合中的单个元素,如果集合为空或包含多个元素则抛出异常
    • SingleOrDefault:返回集合中的单个元素,如果集合为空或包含多个元素则返回默认值
    • Last:返回集合中的最后一个元素
    • LastOrDefault:返回集合中的最后一个元素,如果集合为空则返回默认值
    • ElementAt:返回集合中指定索引处的元素
    • ElementAtOrDefault:返回集合中指定索引处的元素,如果索引超出范围则返回默认值
    • DefaultIfEmpty:如果集合为空,则返回一个包含默认值的集合
  • 跳过与获取指定数量的元素
    • Skip:用于跳过集合中指定数量的元素,并返回剩余的元素序列
    • Take:用于从集合的开头获取指定数量的元素,并返回一个新的序列
  • 条件判断
    • All:用于判断集合中的所有元素是否都满足指定条件
    • Any:检查集合是否包含任何元素
    • Any:用于判断集合中是否存在至少一个满足指定条件的元素
    • Contains:用于判断集合中是否包含指定的元素
  • 其他高级方法
    • Reverse:用于反转集合中的元素顺序
    • SequenceEqual:用于比较两个集合是否相等(即它们是否包含相同数量和顺序的元素)
    • Zip:将两个集合的元素按照指定的函数进行配对,并返回一个新的序列
    • AsEnumerable:将集合转换为 IEnumerable<T> 类型,以便进行LINQ查询。这通常用于在已进行某些操作(如排序或过滤)的集合上执行额外的LINQ操作
    • Cast<TResult>():将集合中的元素转换为指定的类型
    • OfType<TResult>():过滤出集合中指定类型的元素
  • Lambda表达式与扩展方法
  • 总结


前言

以下所有Linq方法都采用此模板

using System;
using System.Linq;
using System.Collections.Generic;namespace ConsoleApp1
{public class Program{public class Person{public int Id { get; set; }public string Name { get; set; }}static void Main(string[] args){List<Person> list = new List<Person>{new Person() { Id =  18, Name = "罗丽" },new Person() { Id = 19, Name = "李明" },};var result = list.FirstOrDefault(item => item.Id == 18);Console.WriteLine(result.Id + " : " + result.Name);//18 : 罗丽Console.ReadLine();}}
}

基本查询方法


Where:用于过滤集合中的元素

var filteredList = list.Where(item => item.Id == 18);

Select:用于将集合中的每个元素投影(转换)为新形式

var newList = list.Select(item => new { NewProperty = item.Name });
foreach (var item in newList) {Console.WriteLine(item.NewProperty);//罗丽 李明
}

SelectMany:用于将多个集合“展平”为一个集合

var flatList = listOfLists.SelectMany(subList => subList);

OrderBy:用于对集合进行升序排序

var sortedList = list.OrderBy(item => item.Id);

OrderByDescending:用于对集合进行降序排序

var sortedListDesc = list.OrderByDescending(item => item.Id);

ThenBy:用于在已排序的集合上应用次要排序

var sortedList = list.OrderBy(item => item.PrimaryProperty).ThenBy(item => item.SecondaryProperty);

ThenByDescending:用于在已排序的集合上应用次要降序排序

var sortedList = list.OrderBy(item => item.PrimaryProperty).ThenByDescending(item => item.SecondaryProperty);

聚合方法


Count:返回集合中的元素数量

var count = list.Count();

Sum:返回集合中数值类型元素的和

var sum = list.Sum(item => item.NumericProperty);

Average:返回集合中数值类型元素的平均值

var average = list.Average(item => item.NumericProperty);

Min:返回集合中的最小值

var min = list.Min(item => item.NumericProperty);

Max:返回集合中的最大值

var max = list.Max(item => item.NumericProperty);

Aggregate:对集合进行自定义聚合操作

var aggregateResult = list.Aggregate((seed, item) => seed + item.NumericProperty);

集合操作


Distinct:返回集合中的唯一元素

var uniqueList = list.Distinct();

Union:返回两个集合的并集

var unionList = list1.Union(list2);

Intersect:返回两个集合的交集

var intersectList = list1.Intersect(list2);

Except:返回在第一个集合中存在但不在第二个集合中存在的元素

var exceptList = list1.Except(list2);

Concat:连接两个或多个集合,并返回一个新的序列

var concatList = list1.Concat(list2);

分组与连接


GroupBy:根据键对集合进行多级分组

var groupedList = list.GroupBy(item => item.KeyProperty);
var multiLevelGroupedList = list.GroupBy(item => item.Key1)  .Select(g => new { Key1 = g.Key, SubGroups = g.GroupBy(subItem => subItem.Key2) });

Join:根据匹配键连接两个集合

var joinedList = list1.Join(list2, item1 => item1.Key, item2 => item2.Key, (item1, item2) => new { item1, item2 });

元素操作


First:返回集合中的第一个元素

var firstElement = list.First();

FirstOrDefault:返回集合中的第一个元素,如果集合为空则返回默认值

var firstOrDefault = list.FirstOrDefault();

Single:返回集合中的单个元素,如果集合为空或包含多个元素则抛出异常

var singleElement = list.Single();

SingleOrDefault:返回集合中的单个元素,如果集合为空或包含多个元素则返回默认值

var singleOrDefault = list.SingleOrDefault();

Last:返回集合中的最后一个元素

var lastElement = list.Last();

LastOrDefault:返回集合中的最后一个元素,如果集合为空则返回默认值

var lastOrDefault = list.LastOrDefault();

ElementAt:返回集合中指定索引处的元素

var elementAt = list.ElementAt(index);

ElementAtOrDefault:返回集合中指定索引处的元素,如果索引超出范围则返回默认值

var elementAtOrDefault = list.ElementAtOrDefault(index);

DefaultIfEmpty:如果集合为空,则返回一个包含默认值的集合

var defaultIfEmpty = list.DefaultIfEmpty();

跳过与获取指定数量的元素


Skip:用于跳过集合中指定数量的元素,并返回剩余的元素序列

var skippedList = list.Skip(numberToSkip);

Take:用于从集合的开头获取指定数量的元素,并返回一个新的序列

var takenList = list.Take(numberToTake);

条件判断


All:用于判断集合中的所有元素是否都满足指定条件

var allSatisfy = list.All(item => item.Condition);

Any:检查集合是否包含任何元素

var hasElements = list.Any();

Any:用于判断集合中是否存在至少一个满足指定条件的元素

var anySatisfy = list.Any(item => item.Condition);

Contains:用于判断集合中是否包含指定的元素

var containsElement = list.Contains(elementToCheck);

其他高级方法


Reverse:用于反转集合中的元素顺序

var reversedList = list.Reverse();

SequenceEqual:用于比较两个集合是否相等(即它们是否包含相同数量和顺序的元素)

var areEqual = list1.SequenceEqual(list2);

Zip:将两个集合的元素按照指定的函数进行配对,并返回一个新的序列

var zippedList = list1.Zip(list2, (item1, item2) => new { item1, item2 });

AsEnumerable:将集合转换为 IEnumerable 类型,以便进行LINQ查询。这通常用于在已进行某些操作(如排序或过滤)的集合上执行额外的LINQ操作

var enumerableList = list.AsEnumerable();

Cast():将集合中的元素转换为指定的类型

var castList = list.Cast<TResult>();

OfType():过滤出集合中指定类型的元素

var ofTypeList = list.OfType<TResult>();

Lambda表达式与扩展方法


  • LINQ查询通常使用Lambda表达式来定义查询条件和操作。Lambda表达式提供了一种简洁的方式来表示匿名方法。
  • LINQ扩展方法是定义在 System.Linq 命名空间中的静态方法,它们可以对实现了 IEnumerable<T> 接口的集合进行操作。通过调用这些扩展方法,你可以对集合执行各种查询和操作。

总结

需要注意的是,LINQ查询的性能取决于多种因素,包括数据源的类型、查询的复杂性以及底层数据的存储方式等。因此,在使用LINQ时,应关注查询的性能,并尽量优化查询逻辑以减少不必要的计算和资源消耗。 以上是对LINQ中一些其他常用方法的介绍。通过学习和掌握这些方法,你可以更灵活地处理各种数据集合,提高编程效率和代码可读性。


http://www.mrgr.cn/news/54371.html

相关文章:

  • 更换镜像部署LNMP环境
  • 今日头条躺赚流量:自动化新闻爬取和改写脚本
  • FineReport 分页
  • docker-compose安装
  • 技术深度剖析:反作弊绕过与 EDR 绕过的比较
  • 如何在Android中进行日志打印和调试?
  • Django 测试指南
  • NVIDIA cuDNN
  • SpringCloud学习:Seata总结与回顾
  • Qt开发技巧(十七):新窗口控件用智能指针,将一些配置类变量封装起来,Qt窗体的Z序叠放,子窗体的释放,Qt中的事件发送,Qt的全局头文件
  • 二、见招拆招:ShardingJDBC分库分表实战指南
  • springboot物流网站-计算机毕业设计源码90281
  • AI 通俗理解强人工智能和弱人工智能
  • 数据结构8—树(链式存储二叉树)
  • 组流技术与流特征分析
  • 软考(网工)——网络规划设计
  • ICM20948 DMP代码详解(90)
  • 什么是 Idempotence 以及它在哪里使用?
  • Windows 11开发环境搭建与应用开发实践
  • lesson01 Backtrader是什么
  • Rust虚拟机Demo
  • Vue基础(四)
  • 树莓派设置中文界面
  • Cisco Secure Network Analytics 7.5.1 发布下载,新增功能概览
  • PostgreSQL数据库存储结构
  • 白平衡之 White Patch 优化