SELECT dan Proyeksi
Bentuk data menjadi format baru
SELECT dan Proyeksi adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Arti Proyeksi
Select mengubah setiap elemen dalam urutan menjadi bentuk baru. Proses ini disebut proyeksi.
Operator ini menerima lambda yang memetakan satu elemen ke suatu hasil dan mengembalikan urutan hasil tersebut, tanpa mengubah sumber.
using System;
using System.Linq;
int[] nums = { 1, 2, 3, 4 };
var squares = nums.Select(n => n * n);
Console.WriteLine(string.Join(", ", squares));Mengubah Tipe
Proyeksi dapat mengubah tipe elemen sepenuhnya. Pemetaan int ke string menghasilkan IEnumerable<string>.
Tipe hasil disimpulkan dari tipe yang dikembalikan lambda, sehingga kompiler melacaknya untuk Anda.
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);Memproyeksikan Properti
Salah satu penggunaan yang umum adalah mengambil satu properti dari objek. Select(p => p.Name) mengubah daftar objek menjadi daftar nama.
Dengan cara ini, data dipersempit menjadi hanya bagian yang Anda perlukan sebelum diproses atau ditampilkan lebih lanjut.
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));Hasil Tipe Anonim
Anda dapat memproyeksikan ke tipe anonim untuk mempertahankan beberapa bidang secara bersamaan. Gunakan new { ... } di dalam lambda.
Kompiler membuat class dengan cepat, lengkap dengan properti hanya-baca, yang ideal untuk membentuk hasil perantara.
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 dengan Indeks
Seperti Where, Select memiliki varian yang menyediakan indeks berbasis nol. Lambda menerima (element, index).
Varian ini sangat cocok untuk memberi nomor pada item atau memasangkan setiap nilai dengan posisinya.
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 dalam Sintaks Kueri
Dalam sintaks kueri, klausa select melakukan proyeksi. Anda dapat memilih elemen itu sendiri atau ekspresi apa pun yang didasarkan padanya.
Gabungkan klausa ini dengan where untuk menyaring dan membentuk data dalam satu kueri yang mudah dibaca.
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 Meratakan
Jika setiap elemen dipetakan ke sebuah koleksi, Select akan menghasilkan urutan yang berisi urutan-urutan lain. SelectMany meratakannya menjadi satu urutan.
Operator ini merupakan padanan LINQ untuk loop bertingkat yang menggabungkan hasil bagian dalam.
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));Proyeksi Juga Tertunda
Select juga menggunakan model eksekusi tertunda. Lambda pemetaan hanya dijalankan saat urutan dijumlahkan.
Karena itu, membangun proyeksi tidak mahal; pekerjaan sebenarnya berlangsung saat Anda mengiterasi atau mewujudkan hasilnya.
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}");Menyaring, Lalu Memproyeksikan
Urutan penting untuk kejelasan dan efisiensi: saring terlebih dahulu dengan Where, lalu proyeksikan dengan Select, sehingga Anda hanya mengubah elemen yang dipertahankan.
Alur ini mudah diikuti dari atas ke bawah dan menghindari pekerjaan proyeksi yang sia-sia.
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));Memproyeksikan ke Record Baru
Selain tipe anonim, Anda dapat memproyeksikan ke tipe bernama atau record. Ini berguna saat hasil melewati batas metode, karena tipe anonim tidak dapat dikembalikan dengan nama yang diketahui.
Beginilah objek transfer data dibangun dari objek domain yang lebih kaya.
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 Mempertahankan Urutan dan Jumlah
Berbeda dari Where, Select tidak pernah menambah atau menghapus elemen—operator ini memetakan elemen secara satu-ke-satu. Hasilnya memiliki jumlah dan urutan yang sama dengan input.
Jika Anda memerlukan lebih sedikit item, lakukan penyaringan; jika memerlukan lebih banyak hasil dari setiap elemen, gunakan 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()}");Uji Singkat
Pilih operator yang tepat untuk tugasnya.
Rangkuman
Select memproyeksikan setiap elemen ke bentuk baru—properti, string, tipe anonim, atau record—dengan mempertahankan jumlah dan urutan secara satu-ke-satu. Operator ini memiliki varian dengan indeks dan bersifat tertunda.
SelectMany meratakan urutan bertingkat. Selanjutnya, kita akan mengurutkan dan mengelompokkan data yang telah kita bentuk.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “SELECT dan Proyeksi” gratis?
Ya — teks lengkap “SELECT dan Proyeksi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “SELECT dan Proyeksi”?
Bentuk data menjadi format baru Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “SELECT dan Proyeksi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- WHERE dan Pemfilteran
- SELECT dan Proyeksi
- OrderBy dan Pengelompokan
- Agregat dan ToList