Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức GroupBy trong LINQ C#


Giới thiệu

GroupBy nhóm các phần tử trong tập hợp theo khóa (key) do selector function trả về. Trả về IEnumerable<IGrouping<TKey, TElement>> - mỗi group có Key và implement IEnumerable<TElement>.

Ví dụ cơ bản

int[] arr = { 2, 30, 45, 60, 70 };
var groups = arr.GroupBy(x => x <= 50); // Key: true/false

Ví dụ hoàn chỉnh

using System;
using System.Linq;

class Demo
{
    static void Main()
    {
        int[] arr = { 2, 30, 45, 60, 70 };
        var check = arr.GroupBy(b => chkSmaller(b));
        foreach (var val in check)
        {
            Console.WriteLine(val.Key); // True / False
            foreach (var res in val)
                Console.WriteLine(res);
        }
    }

    static bool chkSmaller(int a) => a <= 50;
}

Kết quả

True
2
30
45
False
60
70

Các nạp chồng GroupBy phổ biến

  • GroupBy(keySelector)
  • GroupBy(keySelector, elementSelector) - biến đổi element.
  • GroupBy(keySelector, resultSelector) - biến đổi group kết quả.
  • GroupBy(keySelector, elementSelector, resultSelector).
  • GroupBy(keySelector, comparer) - custom IEqualityComparer cho key.

Ví dụ nâng cao: GroupBy với elementSelector

var groups = people.GroupBy(
    p => p.Department,           // Key selector
    p => p.Name,                 // Element selector (chỉ lấy Name)
    (dept, names) => new         // Result selector
    {
        Department = dept,
        Count = names.Count(),
        Members = names.ToList()
    });

Lưu ý

  • Deferred execution.
  • Giữ nguyên thứ tự phần tử trong mỗi group (stable).
  • Thứ tự group theo thứ tự key xuất hiện lần đầu.
  • Với key phức tạp, cần implement IEqualityComparer hoặc override Equals/GetHashCode.