0Pricing
C# Academy · บทเรียน

SELECT และการฉายข้อมูล

จัดรูปข้อมูลให้อยู่ในรูปแบบใหม่

SELECT และการฉายข้อมูล เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

ความหมายของการฉายข้อมูล

Select แปลงสมาชิกแต่ละตัวของลำดับให้เป็นโครงสร้างใหม่ กระบวนการนี้เรียกว่าการฉายข้อมูล

โดยรับแลมบ์ดาที่แปลงสมาชิกหนึ่งตัวให้เป็นผลลัพธ์ และส่งคืนลำดับของผลลัพธ์เหล่านั้น โดยไม่เปลี่ยนแปลงแหล่งข้อมูลเดิม

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4 };
var squares = nums.Select(n => n * n);
Console.WriteLine(string.Join(", ", squares));

การเปลี่ยนชนิดข้อมูล

การฉายข้อมูลสามารถเปลี่ยนชนิดของสมาชิกได้ทั้งหมด การแปลง int เป็น string จะได้ IEnumerable<string>

ชนิดของผลลัพธ์จะอนุมานจากชนิดค่าที่แลมบ์ดาคืนออกมา ดังนั้นคอมไพเลอร์จึงติดตามชนิดนี้ให้คุณ

using System;
using System.Linq;

int[] nums = { 10, 20, 30 };
var labels = nums.Select(n => $"Item #{n}");
foreach (var l in labels) Console.WriteLine(l);

การฉายคุณสมบัติ

การใช้งานที่พบบ่อยคือดึงคุณสมบัติหนึ่งรายการออกจากออบเจ็กต์ Select(p => p.Name) จะแปลงรายการออบเจ็กต์ให้เป็นรายการชื่อ

วิธีนี้ช่วยลดข้อมูลให้เหลือเฉพาะสิ่งที่ต้องใช้ ก่อนนำไปประมวลผลหรือแสดงผลต่อ

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

record User(string Name, int Age);
var users = new List<User> { new("Ana", 30), new("Bo", 25) };
var names = users.Select(u => u.Name);
Console.WriteLine(string.Join(", ", names));

ผลลัพธ์ชนิดไม่ระบุชื่อ

คุณสามารถฉายข้อมูลไปยังชนิดไม่ระบุชื่อเพื่อเก็บหลายฟิลด์ไว้ด้วยกันได้ โดยใช้ new { ... } ภายในแลมบ์ดา

คอมไพเลอร์จะสร้างคลาสขึ้นทันทีพร้อมคุณสมบัติแบบอ่านอย่างเดียว เหมาะสำหรับการจัดโครงสร้างผลลัพธ์ระหว่างทาง

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

record User(string Name, int Age);
var users = new List<User> { new("Ana", 30), new("Bo", 25) };
var shaped = users.Select(u => new { u.Name, IsAdult = u.Age >= 18 });
foreach (var s in shaped) Console.WriteLine($"{s.Name}:{s.IsAdult}");

Select พร้อมดัชนี

เช่นเดียวกับ Where Select มีรูปแบบการเรียกใช้ที่แสดงดัชนีซึ่งเริ่มนับจากศูนย์ แลมบ์ดาจะรับค่า (element, index)

รูปแบบนี้เหมาะอย่างยิ่งสำหรับการใส่หมายเลขให้สมาชิกหรือจับคู่แต่ละค่ากับตำแหน่งของมัน

using System;
using System.Linq;

string[] tasks = { "Wake", "Eat", "Code" };
var numbered = tasks.Select((t, i) => $"{i + 1}. {t}");
foreach (var n in numbered) Console.WriteLine(n);

Select ในไวยากรณ์การสอบถาม

ในไวยากรณ์การสอบถาม ส่วนคำสั่ง select จะทำหน้าที่ฉายข้อมูล คุณสามารถเลือกสมาชิกเองหรือเลือกนิพจน์ใด ๆ ที่อ้างอิงจากสมาชิกนั้นได้

ใช้ร่วมกับ where เพื่อกรองและกำหนดโครงสร้างข้อมูลภายในคำสอบถามเดียวที่อ่านเข้าใจง่าย

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4, 5 };
var result = from n in nums
             where n % 2 == 1
             select n * 10;
Console.WriteLine(string.Join(", ", result));

SelectMany ทำให้แบนราบ

เมื่อสมาชิกแต่ละตัวถูกแปลงเป็นคอลเลกชัน การใช้ Select จะให้ลำดับของลำดับอีกทีหนึ่ง ส่วน SelectMany จะทำให้ลำดับเหล่านั้นรวมเป็นลำดับเดียว

นี่คือรูปแบบเทียบเท่าของ LINQ สำหรับลูปซ้อนที่นำผลลัพธ์ภายในมาต่อกัน

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

var groups = new List<int[]> { new[] {1, 2}, new[] {3, 4} };
var flat = groups.SelectMany(g => g);
Console.WriteLine(string.Join(", ", flat));

การฉายข้อมูลก็เลื่อนเวลาเช่นกัน

Select ใช้รูปแบบการประมวลผลแบบเลื่อนเวลาเช่นเดียวกัน แลมบ์ดาสำหรับแปลงข้อมูลจะทำงานต่อเมื่อมีการแจกแจงลำดับ

ดังนั้นการสร้างการฉายข้อมูลจึงใช้ทรัพยากรน้อย งานจริงจะเกิดขึ้นเมื่อคุณวนอ่านหรือสร้างผลลัพธ์ให้เป็นรูปธรรม

using System;
using System.Linq;

int runs = 0;
int[] nums = { 1, 2, 3 };
var q = nums.Select(n => { runs++; return n; });
Console.WriteLine($"Before: {runs}");
foreach (var _ in q) { }
Console.WriteLine($"After: {runs}");

กรองแล้วฉายข้อมูล

ลำดับมีความสำคัญทั้งต่อความชัดเจนและประสิทธิภาพ ควรกรองด้วย Where ก่อน แล้วจึงฉายข้อมูลด้วย Select เพื่อแปลงเฉพาะสมาชิกที่คุณเก็บไว้

กระบวนการนี้อ่านจากบนลงล่างได้ดี และหลีกเลี่ยงการเสียเวลาแปลงข้อมูลที่ไม่จำเป็น

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4, 5, 6 };
var result = nums.Where(n => n % 2 == 0)
                 .Select(n => n * n);
Console.WriteLine(string.Join(", ", result));

การฉายข้อมูลไปยังระเบียนใหม่

แทนที่จะใช้ชนิดไม่ระบุชื่อ คุณสามารถฉายข้อมูลไปยังชนิดที่มีชื่อหรือ record ได้ วิธีนี้มีประโยชน์เมื่อผลลัพธ์ต้องส่งข้ามขอบเขตของเมธอด เนื่องจากชนิดไม่ระบุชื่อไม่สามารถส่งคืนโดยใช้ชื่อที่ทราบแน่ชัดได้

นี่เป็นวิธีสร้างออบเจ็กต์ถ่ายโอนข้อมูลจากออบเจ็กต์โดเมนที่มีข้อมูลสมบูรณ์กว่า

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

record User(string Name, int Age);
record Summary(string Name);
var users = new List<User> { new("Ana", 30) };
var dtos = users.Select(u => new Summary(u.Name));
foreach (var d in dtos) Console.WriteLine(d.Name);

Select รักษาลำดับและจำนวน

ต่างจาก Where ตรงที่ Select ไม่เคยเพิ่มหรือลบสมาชิก แต่จะแปลงแบบหนึ่งต่อหนึ่ง ผลลัพธ์จึงมีจำนวนและลำดับเดียวกับข้อมูลนำเข้า

หากต้องการสมาชิกน้อยลง ให้กรองข้อมูล หากต้องการผลลัพธ์หลายรายการจากสมาชิกแต่ละตัว ให้ใช้ SelectMany

using System;
using System.Linq;

int[] nums = { 5, 1, 9 };
var doubled = nums.Select(n => n * 2);
Console.WriteLine($"In:{nums.Length} Out:{doubled.Count()}");

ตรวจสอบความเข้าใจอย่างรวดเร็ว

เลือกตัวดำเนินการให้เหมาะกับงาน

ทบทวน

Select ฉายข้อมูลสมาชิกแต่ละตัวให้เป็นโครงสร้างใหม่ เช่น คุณสมบัติ สตริง ชนิดไม่ระบุชื่อ หรือระเบียน โดยรักษาจำนวนและลำดับแบบหนึ่งต่อหนึ่งไว้ มีรูปแบบการเรียกใช้ที่รับดัชนีและทำงานแบบเลื่อนเวลา

SelectMany ทำให้ลำดับที่ซ้อนกันแบนราบ ต่อไปเราจะเรียงลำดับและจัดกลุ่มข้อมูลที่เรากำหนดโครงสร้างไว้

คำถามที่พบบ่อย

บทเรียน “SELECT และการฉายข้อมูล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “SELECT และการฉายข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “SELECT และการฉายข้อมูล”

จัดรูปข้อมูลให้อยู่ในรูปแบบใหม่ คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “SELECT และการฉายข้อมูล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. WHERE และการกรอง
  2. SELECT และการฉายข้อมูล
  3. OrderBy และการจัดกลุ่ม
  4. การรวมค่าและ ToList
← กลับไปที่ C# Academy