LINQ cung cấp hai phương thức mở rộng Min() và Max() để tìm giá trị nhỏ nhất và lớn nhất trong một tập hợp. Các phương thức này hoạt động trên bất kỳ IEnumerable<T> nào với T implement IComparable.
Ví dụ với List<long>
List list = new List { 150, 300, 400, 350, 450, 550, 600 };
long min = list.AsQueryable().Min(); // 150
long max = list.AsQueryable().Max(); // 600
Mã nguồn hoàn chỉnh
using System;
using System.Collections.Generic;
using System.Linq;
class Demo
{
static void Main()
{
List list = new List { 150, 300, 400, 350, 450, 550, 600 };
foreach (long ele in list)
Console.WriteLine(ele);
long max_num = list.AsQueryable().Max();
long min_num = list.AsQueryable().Min();
Console.WriteLine("Smallest number = {0}", min_num);
Console.WriteLine("Largest number = {0}", max_num);
}
}
Kết quả
150
300
400
350
450
550
600
Smallest number = 150
Largest number = 600
Các overload hữu ích
// Chọn property để so sánh
var maxSalary = employees.Max(e => e.Salary);
var minDate = orders.Min(o => o.OrderDate);
// Trả về toàn bộ object có giá trị max/min (C# 7.3+)
var richest = employees.MaxBy(e => e.Salary); // Cần .NET 6+ hoặc MoreLINQ
var oldest = orders.MinBy(o => o.OrderDate);
Lưu ý
- Ném
InvalidOperationExceptionnếu chuỗi rỗng. Kiểm traAny()trước hoặc dùngDefaultIfEmpty(). - Với reference type, so sánh theo
IComparablehoặc custom comparer. AsQueryable()chỉ cần thiết cho LINQ to SQL/Entities. Với LINQ to Objects, dùng trực tiếplist.Min().