.NET6 Linq新特性MaxBy 和 MinBy

    .NET 6去年11月份发布,其中.NET 6 中也添加了许多 LINQ 方法。今天我们讲讲.NET6的Linq新特性MaxBy 和 MinBy,他们是干啥的呢?微软官方解释是“使用键选择器查找最大或最小元素。”从解释可以得出,它们是找出元素中的最大值和最小值,不是有Max和Min可以实现吗?这篇文章将用代码看看他们的异同。

1、数据准备

首先新建一个客户类,并模拟填充一些数据,用来做数据准备。字段有id,name,email,age如下代码

public class Customer //客户类
    {
        public int id { get; set; }
        public string name { get; set; }
        public string email { get; set; }
        public int age { get; set; }
    }
    //模拟数据
    public static List<Customer> GetCustomer()
        {
            List<Customer> list = new List<Customer>();
            list.Add(new Customer { id = 1, name = "刘德华", age = 56, email = "ldh@net.cn" });
            list.Add(new Customer { id = 2, name = "张学友", age = 52, email = "zxy@net.cn" });
            list.Add(new Customer { id = 3, name = "黎明", age = 58, email = "lm@net.cn" });
            list.Add(new Customer { id = 4, name = "郭富城", age = 60, email = "gfc@net.cn" });
            list.Add(new Customer { id = 5, name = "古天乐", age = 60, email = "gtl@net.cn" });
            return list;
       }

2、对比使用

分别使用Max、Min和MaxBy、MinBy查出age(年龄)最大的值和最小值。

var relMax = GetCustomer().Max(a =>a.age);
var relMin = GetCustomer().Min(a => a.age);
var relMaxBy = GetCustomer().MaxBy(a =>a.age);
var relMinBy = GetCustomer().MinBy(a => a.age);
 Console.WriteLine($"Max:{relMax}");
 Console.WriteLine($"Max:{relMin}");
 Console.WriteLine($"Max:{relMaxBy}");
 Console.WriteLine($"Max:{relMinBy}");

用控制台程序输出结果

ac98c326d6d45e4ac7d1f0720735c022.png

从结果中可以看出Max、Min返回的是当前对象具体某个属性的值,而MaxBy、MinBy返回的是对象,这个对象是啥呢?我们调试看看。

7327f1c91446495c8a1ee071d878e074.pngb681d7fc02a5b0e07c33d45331c79720.png

由结果可以看出分别返回查询对象集合属性最大值的一条数据和最小的一条数据。如果有两条相同的数据会取第一条。

当然也可以用MaxBy、MinBy查询单一数组,跟Max、Min效果一样,如下效果:

List<int> nums = new List<int>() { 5, 4, 1, 7, 12, 10 };
 var maxnum = nums.MaxBy(x => x);
 var mixnum = nums.MinBy(x => x);
 //返回结果:12,1

不推荐这样使用。这样大才小公用了。

总结

      由上面的例子可见,Max、Min分别返回的是当前对象具体某个属性的最大值和最小值,而MaxBy、MinBy分别返回的是当前集合具体某个属性最大值和最小值的对象。简单的说Max、Min返回具体的值,而MaxBy、MinBy返回当前对象。

    希望本文对大家有所收获,欢迎大家留言和异议。

版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。

技术群:添加小编微信并备注进群
小编微信:mm1552923   公众号:dotNet编程大全
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值