首页 / 教程列表 / LINQ教程 / LINQ操作符之Max和Min

LINQ操作符之Max和Min

1193 更新于: 2022-04-26 读完约需 11 分钟

LINQ中的Max

C#语言中LINQ的Max()方法用以返回集合中最大的数字元素。

以下是一个使用Max()方法获取整数集合中最大数的示例:

Max的方法语法

using System;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var max = numbers.Max();
            Console.WriteLine($"集合numbers中最大的数为:{max}");

            var filterMax = numbers.Where(x => x < 6).Max();
            Console.WriteLine($"集合numbers中小于6的最大数为:{filterMax}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中最大的数为:10
集合numbers中小于6的最大数为:5

Max的查询语法

using System;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var max = (from num in numbers select num).Max();
            Console.WriteLine($"集合numbers中最大的数为:{max}");

            var filterMax = (from num in numbers where num < 6 select num).Max();
            Console.WriteLine($"集合numbers中小于6的最大数为:{filterMax}");

            Console.Read();
        }
    }
}

Max()方法一共有13个重载,其中支持委托类型的选择器,比如可以在Max方法中编写复杂的语句,示例如下:

using System;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var max = numbers.Max(x =>
            {
                if (x < 5)
                {
                    return x + 20;
                }
                return x;
            });
            Console.WriteLine($"集合numbers中的最大数为:{max}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中的最大数为:24

Count等方法类似,Max也可以操作复杂类型的集合。

比如,我们要从本系列的示例订单集合中找出最高的订单价格,使用LINQ的Max方法实现如下:

using System;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var orders = FakeData.Orders;
            var maxPrice = orders.Max(x => x.Price);
            Console.WriteLine($"订单列表中最高的订单价格为:{maxPrice}");
            Console.Read();
        }
    }
}

运行结果:

订单列表中最高的订单价格为:5699

注意:以上示例代码查找到的maxPrice仅仅是订单集合中价格最高的订单的Price属性值,而不是Order订单元素。

如果有通过LINQ的Max方法查询价格最高的订单元素,则要实现IComparable接口,示例如下:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var orders = new List<MyOrder>
            {
                new() {Id = 1,Price = 1699.00},
                new() {Id = 2,Price = 5999.00},
                new() {Id = 3,Price = 1999.00},
                new() {Id = 4,Price = 2899.00},
                new() {Id = 5,Price = 999.00},
                new() {Id = 6,Price = 4999.00},
            };
            var maxPriceOrder = orders.Max();
            Console.WriteLine($"订单列表中价格最高的订单Id: {maxPriceOrder.Id},价格: {maxPriceOrder.Price}");
            Console.Read();
        }
    }

    public class MyOrder : IComparable<MyOrder>
    {
        public int Id { get; set; }
        public double Price { get; set; }

        public int CompareTo(MyOrder other)
        {
            if (ReferenceEquals(this, other)) return 0;
            if (ReferenceEquals(null, other)) return 1;
            return Price.CompareTo(other.Price);
        }
    }
}

运行结果:

订单列表中价格最高的订单Id: 2,价格: 5999

LINQ中的Min

LINQ中的Min操作符与Max操作符类似,只是Min用以返回集合中最小的数字元素。具体操作示例请参考以上Max文档。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

本文永久链接码友网 » LINQ教程 » LINQ操作符之Max和Min 分享:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册