C# Linq常用方法

文章目录


前言

以下所有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中一些其他常用方法的介绍。通过学习和掌握这些方法,你可以更灵活地处理各种数据集合,提高编程效率和代码可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sky-stars

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值