.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}");

用控制台程序输出结果

.NET6 Linq新特性MaxBy 和 MinBy

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

.NET6 Linq新特性MaxBy 和 MinBy.NET6 Linq新特性MaxBy 和 MinBy

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

当然也可以用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返回当前对象。
    希望本文对大家有所收获,欢迎大家留言和异议。