NET 6 中新增的LINQ 方法

NET 6 中新增的LINQ 方法

微软太给力了NET5 LINQ很多功能点还没用到NET6 LINQ 新功能就到来了 而且 NET6 有些功能确实很贴切列如:

Chunk

TryGetNonEnumeratedCount

Zip

ElementAt

MaxBy

MinBy

DistinctBy

ExceptBy

IntersectBy

UnionBy

FirstOrDefault

LastOrDefault

SingleOrDefault

Take

Chunk

chunk 该方法将序列的元素拆分为指定大小的区块

st<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var newNames=names.Chunk(3);
foreach (var name in newNames)
{
    Console.WriteLine(String.Join(",",name));
}
Console.ReadKey();

在这里插入图片描述

TryGetNonEnumeratedCount

TryGetNonEnumeratedCount该方法尝试在不强制枚举的情况下获取可枚举的源的计数

List<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
int num = 0;
names.TryGetNonEnumeratedCount(out num);
Console.WriteLine(num);
Console.ReadKey();

在这里插入图片描述

Zip

Zip该方法将两个数组进行整合成为一个 ValueTuple<T,SecondT>数组

List<string> names1 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射" };
List<string> names2 = new List<string>() { "红薯","王初冬", "呵呵", "裴南苇" };
var names=names1.Zip(names2);
Console.WriteLine(String.Join(",", names));
Console.ReadKey();

在这里插入图片描述

ElementAt

ElementAt 该方法返回元素指定索引或者结束的索引

List<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var index1=names.ElementAt(3);
var index2=names.ElementAt(^3);
Console.WriteLine(index1);
Console.WriteLine(index2);
Console.ReadKey();

在这里插入图片描述

MaxBy

MaxBy该方法放回数组或是列表中的最大值

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result = names.MaxBy(x=>x);
Console.WriteLine(result);
Console.ReadKey();

名字可能效果不是很好下面使用数字来表示效果好点

List<int> numbers = new List<int>() { 100,99,5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
  var maxnum= numbers.MaxBy(x => x);

在这里插入图片描述

MinBy

MinBy该方法放回数组或是列表中的最小值

List<int> numbers = new List<int>() { 100, 99, 5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
var result = numbers.MinBy(x => x);
Console.WriteLine(result);
Console.ReadKey();

在这里插入图片描述

DistinctBy

DistinctBy该方法根据某元素去重(可以自定义元素属性去重)

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇", "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result = names.DistinctBy(x => x);
Console.WriteLine(String.Join(",",result));
Console.ReadKey();

在这里插入图片描述

ExceptBy

ExceptBy该方法返回 两个序列的元素的集合差值的序列

List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
List<string> names3 = new List<string>();
var names = names2.ExceptBy(names1, names1 => names1);
Console.WriteLine(names);
Console.ReadKey();

在这里插入图片描述

IntersectBy

IntersectBy 该方法返回两个序列元素 得交际

List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
List<string> names3 = new List<string>();
var names = names2.IntersectBy(names1, names1 => names1);
Console.WriteLine(String.Join(" ", names));
Console.ReadKey();

在这里插入图片描述

UnionBy

UnionBy该方法连接不同集合,过滤某元素相同项

List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
List<string> names3 = new List<string>();
var names = names2.UnionBy(names1, names1 => names1);
Console.WriteLine(String.Join(" ", names));
Console.ReadKey();

在这里插入图片描述

FirstOrDefault

FirstOrDefault该方法返回序列中满足条件的第一个元素;如果未找到这样的元素,则返回默认值

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result=names.FirstOrDefault(x=>x.Contains("人屠"),"凤年");
Console.WriteLine(result);
Console.ReadKey();

在这里插入图片描述

LastOrDefault

LastOrDefault该方法返回序列中的最后一个元素;如果未找到该元素,则返回默认值

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result = names.LastOrDefault(x => x.Contains("人屠"), "呵呵");
Console.WriteLine(result);
Console.ReadKey();

在这里插入图片描述

SingleOrDefault

SingleOrDefault 该方法返回序列中的唯一元素;如果该序列为空,则返回默认值;如果该序列包含多个元素,此方法将引发异常。

string[] strName = { "凤年" };
string[] strNameEmpty = { };
string[] strEmpty = { "凤年", "姜泥" };
try
{
    string tempName = strName.SingleOrDefault();
    Console.WriteLine("SingleOrDefault()第一种 返回序列中的唯一记录。");
    Console.WriteLine("信息为:{0}", tempName);

    string tempNameEmpty = strNameEmpty.SingleOrDefault();
    Console.WriteLine("SingleOrDefault()第二种 如果该序列为空,则返回默认值。");
    Console.WriteLine("信息为:{0}", tempNameEmpty);

    string tempEmpty = strEmpty.SingleOrDefault();
}
catch (Exception ex)
{
    Console.WriteLine("SingleOrDefault()第三种 如果该序列包含多个元素,则引发异常。");
    Console.WriteLine("信息为:{0}", ex.Message);
}

SingleOrDefault

Take

Take 该方法 从序列的开头返回指定数量的相邻元素

List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
var result = names.Take(3);
Console.WriteLine(String.Join(",",result.ToList()));
Console.ReadKey();

在这里插入图片描述
#总结 以上就是NET6 更新的常用方法,完整代码如下


#region  SingleOrDefault
string[] strName = { "凤年" };
string[] strNameEmpty = { };
string[] strEmpty = { "凤年", "姜泥" };
try
{
    string tempName = strName.SingleOrDefault();
    Console.WriteLine("SingleOrDefault()第一种 返回序列中的唯一记录。");
    Console.WriteLine("信息为:{0}", tempName);

    string tempNameEmpty = strNameEmpty.SingleOrDefault();
    Console.WriteLine("SingleOrDefault()第二种 如果该序列为空,则返回默认值。");
    Console.WriteLine("信息为:{0}", tempNameEmpty);

    string tempEmpty = strEmpty.SingleOrDefault();
}
catch (Exception ex)
{
    Console.WriteLine("SingleOrDefault()第三种 如果该序列包含多个元素,则引发异常。");
    Console.WriteLine("信息为:{0}", ex.Message);
}
#endregion
#region Task
//List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result = names.Take(3);
//Console.WriteLine(String.Join(",",result.ToList()));
//Console.ReadKey();
#endregion

#region FirstOrDefault
//List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result = names.LastOrDefault(x => x.Contains("人屠"), "呵呵");
//Console.WriteLine(result);
//Console.ReadKey();
#endregion


#region FirstOrDefault
//List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result=names.FirstOrDefault(x=>x.Contains("人屠"),"凤年");
//Console.WriteLine(result);
//Console.ReadKey();
#endregion
#region ExceptBy
//List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
//List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//List<string> names3 = new List<string>();
//var names = names2.UnionBy(names1, names1 => names1);
//Console.WriteLine(String.Join(" ", names));
//Console.ReadKey();
#endregion

#region ExceptBy
//List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
//List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//List<string> names3 = new List<string>();
//var names = names2.IntersectBy(names1, names1 => names1);
//Console.WriteLine(String.Join(" ", names));
//Console.ReadKey();
#endregion


#region ExceptBy
//List<string> names1 = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "红薯" };
//List<string> names2 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//List<string> names3 = new List<string>();
//var names = names2.ExceptBy(names1, names1 => names1);
//Console.WriteLine(String.Join(" ",names));
//Console.ReadKey();
#endregion


#region DistinctBy
//List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇", "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result = names.DistinctBy(x => x);
//Console.WriteLine(String.Join(",",result));
//Console.ReadKey();

#endregion
#region MaxBy
//List<string> names = new List<string>() { "凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var result = names.MaxBy(x=>x);
//Console.WriteLine(result);
//Console.ReadKey();
#endregion

#region MinBy
//List<int> numbers = new List<int>() { 100, 99, 5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
//var result = numbers.MinBy(x => x);
//Console.WriteLine(result);
//Console.ReadKey();
#endregion

#region ElementAt
//List<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var index1=names.ElementAt(3);
//var index2=names.ElementAt(^3);
//Console.WriteLine(index1);
//Console.WriteLine(index2);
//Console.ReadKey();
#endregion

#region Zip
//List<string> names1 = new List<string>() { "凤年", "陆丞燕", "姜泥", "南宫仆射" };
//List<string> names2 = new List<string>() { "红薯","王初冬", "呵呵", "裴南苇" };
//var names=names1.Zip(names2);
//Console.WriteLine(String.Join(",", names));
//Console.ReadKey();
#endregion

#region TryGetNonEnumeratedCount
//List<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//int num = 0;
//names.TryGetNonEnumeratedCount(out num);
//Console.WriteLine(num);
//Console.ReadKey();

#endregion

#region Chunk
//List<string> names = new List<string>() {"凤年", "陆丞燕", "呵呵", "姜泥", "南宫仆射", "王初冬", "红薯", "裴南苇" };
//var newNames=names.Chunk(3);
//foreach (var name in newNames)
//{
//    Console.WriteLine(String.Join(",",name));
//}
//Console.ReadKey();

//var names = new[] { "Tom", "Jack", "Kate" };
//var other_names = new[] { "Lily", "Aaron", "Eric" };
//var concated = names.Concat(other_names);
这样做会有什么不好的地方。(IO? Cpu?)
//Console.WriteLine(concated.Count());
#endregion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值