Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เมธอด Concat ใน C# (LINQ) - ต่อรายการต่อเนื่อง

Enumerable.Concat() ใช้ต่อ Sequence สองชุดเข้าด้วยกัน โดยไม่ตัดค่าซ้ำ (แตกต่างจาก Union) คืนค่า Sequence ใหม่แบบ Deferred Execution

ลายเซ็น

public static IEnumerable<TSource> Concat<TSource>(
    this IEnumerable<TSource> first,
    IEnumerable<TSource> second);

ตัวอย่างพื้นฐาน

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

public class Demo
{
    public static void Main()
    {
        var list1 = new List { 12, 40 };
        var list2 = new List { 98, 122, 199, 230 };

        var concatenated = list1.Concat(list2);

        foreach (int n in concatenated)
            Console.WriteLine(n);
    }
}

ผลลัพธ์

12
40
98
122
199
230

คุณสมบัติสำคัญ

  • ไม่ตัดซ้ำ: ค่าที่ซ้ำกันจะปรากฏทั้งคู่
  • รักษาลำดับ: รายการแรกทั้งหมด ตามด้วยรายการที่สองทั้งหมด
  • Deferred Execution: ไม่คำนวณจนกว่าจะ Enumerate (foreach, ToList(), etc.)
  • Streaming: ใช้หน่วยความจำคงที่ ไม่โหลดทั้งหมดเข้ามีอรี่

Concat หลายรายการ

var all = list1.Concat(list2).Concat(list3).Concat(list4);

// หรือใช้ SelectMany สำหรับหลายลิสต์
var lists = new[] { list1, list2, list3, list4 };
var all = lists.SelectMany(x => x);

Concat กับ Array

int[] arr1 = { 1, 2 };
int[] arr2 = { 3, 4 };
var result = arr1.Concat(arr2).ToArray(); // {1, 2, 3, 4}

เปรียบเทียบ Concat vs Union vs AddRange

เมธอดตัดซ้ำแก้ไขต้นทางDeferredใช้กับ
Concat()ไม่ไม่ใช่IEnumerable<T>
Union()ใช่ไม่ใช่IEnumerable<T>
List.AddRange()ไม่ใช่ไม่List<T> เท่านั้น

กรณีใช้งานจริง

  • รวมผลลัพธ์จาก Query หลายอัน (Union All ใน SQL)
  • สร้าง Pipeline ประมวลผลข้อมูลแบบ Streaming
  • ต่อ Header + Body + Footer ของรายงาน
  • รวมข้อมูลจากหลายแหล่ง (Multiple Data Sources)