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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- WHERE และการกรอง
- SELECT และการฉายข้อมูล
- OrderBy และการจัดกลุ่ม
- การรวมค่าและ ToList