Anda di halaman 1dari 104

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/359439569

Belajar C#: Panduan Lengkap LINQ

Book · March 2022

CITATIONS READS

0 365

2 authors:

M Reza Faisal Erick Kurniawan


Universitas Lambung Mangkurat Universitas Kristen Duta Wacana
74 PUBLICATIONS   196 CITATIONS    24 PUBLICATIONS   12 CITATIONS   

SEE PROFILE SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Publications View project

Effect of features Generated from additional segments in protein sequence classification View project

All content following this page was uploaded by M Reza Faisal on 25 March 2022.

The user has requested enhancement of the downloaded file.


Belajar C#

Panduan Lengkap LINQ

M. Reza Faisal
Erick Kurniawan
Belajar C#: Panduan Lengkap LINQ
© 2022 M Reza Faisal, Erick Kurniawan

87 halaman, 16,5 x 23 cm

Katalog dalam Terbitan (KDT)


Perpustakaan Nasional Republik Indonesia
ISBN: -

Hak cipta dilindungi undang-undang. Dilarang memperbanyak sebagian atau seluruh


isi buku ini dalam bentuk apa pun, baik secara elektronik, termasuk memfotokopi,
merekam, atau dengan menggunakan sistem penyimpanan lainnya, tanpa izin tertulis
dari penulis atau penerbit.

Cetakan I: September 2020

Penerbit
Scripta Cendekia
Banjarbaru, Kalimantan Selatan, Indonesia
E: scriptacendekia@gmail.com

Belajar C#: Panduan Lengkap LINQ│ i


Daftar Isi

Daftar Isi .............................................................................................................ii


Daftar Gambar ................................................................................................... v
1 Pendahuluan ................................................................................................... 1
Pembaca Buku ....................................................................................... 1
Mengenal .NET ..................................................................................... 1
.NET SDK ........................................................................................ 2
C# ..................................................................................................... 7
LINQ ................................................................................................ 8
Entity Framework Core ................................................................. 9
Tool Development ................................................................................ 9
Visual Studio ................................................................................... 9
Try .NET ........................................................................................ 12
Source Code ......................................................................................... 12
2 Hello World! .................................................................................................. 14
Hello Visual Studio 2022.................................................................... 14
Hello Visual Studio Code .................................................................. 21
Folder ............................................................................................. 21
Workspace ..................................................................................... 24
.NET Interactive Notebook ......................................................... 26
Hello Try .NET .................................................................................... 28
Hello C# ............................................................................................... 29
Hello LINQ .......................................................................................... 33
3. Entity Framework Core ............................................................................... 38
Pendahuluan ....................................................................................... 38
Menyiapkan Database ........................................................................ 39
SQL Server ..................................................................................... 39
MySQL ........................................................................................... 42

ii │ M Reza Faisal & Erick Kurniawan


Kode SQL ....................................................................................... 44
Command Line .................................................................................... 45
MySQL ........................................................................................... 45
SQL Server ..................................................................................... 49
Koneksi Database ......................................................................... 52
Visual Studio & Package Manager Console .................................... 54
MySQL ........................................................................................... 54
SQL Server ..................................................................................... 56
Koneksi Database ......................................................................... 58
4 Operator Projection ...................................................................................... 61
Klausa Select ........................................................................................ 61
Memilih Sebuah Property .................................................................. 63
Anonymous Type dan Tuple ............................................................ 65
Subset dari Property-Property .......................................................... 69
Penggunaan select & where .............................................................. 70
Memilih Dari Beberapa Input ........................................................... 72
5 Operator Ordering ......................................................................................... 75
Mengurutkan Elemen ......................................................................... 75
Menurutkan Berdasarkan Property.................................................. 76
Mengurutkan Menurun ..................................................................... 78
6 Operator Grouping ........................................................................................ 80
Mengelompokkan Ke Keranjang ...................................................... 80
Mengelompokkan Berdasarkan Property ....................................... 81
7 Operator Partition ........................................................................................ 83
8 Operator Set ................................................................................................... 84
9 Operator Conversion .................................................................................... 85
10 Operator Element ........................................................................................ 86
11 Operator Aggregator ................................................................................... 87
12 Operasi Sequence ......................................................................................... 88
13 Operasi Join .................................................................................................. 89
Belajar C#: Panduan Lengkap LINQ│ iii
14 Tambahan ..................................................................................................... 90
Generate Sequences ............................................................................ 90
Quntifiying Members ......................................................................... 90
Eager and Lazy Query Execution ..................................................... 90
Tentang Penulis ................................................................................................ 91

iv │ M Reza Faisal & Erick Kurniawan


Daftar Gambar

Gambar 1. Ulang tahun ke 20 .NET. ......................................................................... 1


Gambar 2. Command Prompt. .................................................................................. 3
Gambar 3. Daftar template project............................................................................ 5
Gambar 4. Windows Explorer – ContohC#. ............................................................ 6
Gambar 5. Command Prompt – ContohC#. ............................................................ 6
Gambar 6. Command Prompt – Website. ................................................................ 7
Gambar 7. Visual Studio. ........................................................................................... 9
Gambar 8. Visual Studio 97. .................................................................................... 10
Gambar 9. VS 2022. ................................................................................................... 10
Gambar 10. VS Code. ................................................................................................ 11
Gambar 11. Try .NET. ............................................................................................... 12
Gambar 12. Github – BelajarLINQ. ......................................................................... 13
Gambar 13. Visual Studio Code Online – BelajarLINQ. ...................................... 13
Gambar 14. VS 2022 – Halaman Depan. ................................................................ 14
Gambar 15. VS 2022 – Daftar template project. ..................................................... 15
Gambar 16. VS 2022 – Memberi nama solution. ................................................... 15
Gambar 17. VS 2020 – Halaman kerja..................................................................... 16
Gambar 18. VS 2022 – Window daftar template project. ..................................... 16
Gambar 19. VS 2022 – Memberi nama project. ...................................................... 17
Gambar 20. VS 2022 – Code editor.......................................................................... 18
Gambar 21. Console. ................................................................................................. 18
Gambar 22. VS 2022 – Windows Form App. ......................................................... 19
Gambar 23. VS 2022 – HelloWorldWinForms. ...................................................... 20
Gambar 24. VS 2022 – Project HelloWorldWinForm............................................ 20
Gambar 25. VS 2022 – Menjalankan project HelloWorldWinForm. ................... 21
Gambar 26. VS Code - Project HelloWorldConsole. ............................................ 22
Gambar 27. VS Code – Extensions. ......................................................................... 23

Belajar C#: Panduan Lengkap LINQ│ v


Gambar 28. VS Code – HelloWorldWinForms. .................................................... 24
Gambar 29. VS Code – belajar-linq-workspace.code-workspace. ...................... 24
Gambar 30. VS Code – HelloConsole. .................................................................... 25
Gambar 31. VS Code – HelloConsole – Program.cs. ............................................ 26
Gambar 32. VS Code - .NET Interactive Notebooks. ........................................... 26
Gambar 33. VS Code – Create new blank notebook. ........................................... 27
Gambar 34. VS Code – Menulis dan menjalankan kode. .................................... 28
Gambar 35. Try .NET – Hello, World! .................................................................... 29
Gambar 36. File global using. .................................................................................. 31
Gambar 37. Window Add New Item – HelloLINQ. ............................................ 34
Gambar 38. Northwind database (https://docs.yugabyte.com/latest/sample-
data/northwind/)............................................................................................. 39
Gambar 39. SSMS – Konek ke SQL Server Express. ............................................. 40
Gambar 40. SSMS – Membuat tabel dan mengisi data. ....................................... 41
Gambar 41. SSMS – Database Northwind, tabel dan data. ................................. 42
Gambar 42. XAMPP for Windows. ......................................................................... 43
Gambar 43. phpMyAdmin – Membuat tabel. ....................................................... 44
Gambar 44. phpMyAdmin – Daftar tabel. ............................................................. 44
Gambar 45. Project DataAccess. .............................................................................. 53
Gambar 46. NuGet Package - MySql.EntityFrameworkCore. ............................ 54
Gambar 47. Package-package yang telah diinstall. .............................................. 55
Gambar 48. Package Manager Console. ................................................................. 55
Gambar 49. Porject DataAccess - Folder MySQL. ................................................ 56
Gambar 50. NuGet Package - Microsoft.EntityFrameworkCore.SqlServer. ..... 57
Gambar 51. Porject DataAccess - Folder SQL Server. .......................................... 58
Gcambar 52. Ouput Kode 20. .................................................................................. 62
Gambar 53. Output project Projection_01. ............................................................ 63
Gambar 54. Window Reference Manager. ............................................................. 77
Gambar 55. Project Ordering_02. ............................................................................ 77

vi │ M Reza Faisal & Erick Kurniawan


1
Pendahuluan

Pembaca Buku
Buku ini ditujukan kepada pembaca yang telah mengerti dasar-dasar algoritma
dan konsep pemrograman berbasis obyek (Object Oriented Programming)
dengan bahasa pemrograman C#. Pembaca juga diharapkan telah memiliki
dasar-dasar penggunakan Structured Query Language (SQL) pada database.

Mengenal .NET
.NET adalah developer platform dengan bahasa pemrograman, tool dan library
untuk membangun berbagai tipe aplikasi seperti web, mobile, desktop, game,
IoT dan microservice. Saat ini .NET sudah mencapai versi 6.

Gambar 1. Ulang tahun ke 20 .NET.


Saat ini .NET telah berusia 20 tahun. Di awal perkembangannya digunakan
nama .NET Framework. Salah satu tujuannya adalah untuk membuat sebuah
aplikasi dengan berbagai bahasa pemrograman sehingga orang-orang dengan
kemampuan bahasa pemrograman yang berbeda dapat bekerja untuk
membangun sebuah aplikasi. Aplikasi yang yang dapat dibangun adalah

1
console, desktop dan web. .NET Framework hanya dapat dijalankan di atas
sistem operasi Windows. Sampai saat ini .NET Framework sudah mecapai versi
4.8 yang dirilis pada tahun 2019.

Di tahun yang sama dengan tahun rilisnya .NET Framework 4.8, dirilis .NET
Core 1.0. .NET Core bukan merupakan kelanjutan dari .NET Framework.
Development platform ini dibuat dan ditulis ulang dari awal. Kelebihan dari
.NET Core adalah sifatnya yang open-source dan dapat dijalankan pada sistem
operasi Windows, Linux dan MacOS. Platform ini tidak hanya dapat digunakan
untuk membangun aplikasi desktop dan web tapi juga dapat digunakan untuk
mengembangkan aplikasi mobile, cloud, IoT, game dan microservice.

Pengembangan .NET Core dimulai pada November 2015 dengan versi RC1 dan
mencapai versi 1.0 pada Juni 2016. Pada perkembangannya nama .NET Core
hanya sampai versi 3.1 yang dirilis pada Desember 2019. Setelah itu namanya
berganti menjadi .NET dengan versi 5.0 yang dirilis pada November 2020. Dan
saat buku ini dibuat telah hadir .NET 6.0 yang dirilis pada bulan November
2021.

Untuk menggunakan .NET maka perlu dilakuan proses unduh dan installasi.
File instalasi .NET dapat diunduh di https://dotnet.microsoft.com/en-
us/download. Tersedia dua tipe installer yaitu .NET Runtime dan .NET SDK.
Jika tujuannya untuk mengembangkan aplikasi maka pilih .NET SDK karena
selain berisi .NET Runtime, installer ini juga berisi SDK (Software Development
Kit) yang digunakan untuk mengembangkan software.

.NET SDK
Pada sub bab ini akan diberikan contoh penggunaan perintah-perintah .NET
SDK. Versi .NET SDK yang digunakan pada buku ini adalah .NET 6 SDK.
Untuk itu pastikan .NET SDK sudah diinstall. Untuk memeriksa status
installasi dapat dilakukan dengan menjalankan Command Prompt seperti yang
dapat dilihat pada Gambar 2.

2 │ M Reza Faisal & Erick Kurniawan


Gambar 2. Command Prompt.
Ketikkan perintah berikut pada Command Prompt. Jika perintah tersebut
memberikan keluaran artinya ada .NET SDK yang telah diinstall.
dotnet --info

Keluaran dari perintah tersebut adalah sebagai berikut. Pada output ini dapat
dilihat daftar .NET SDK yang telah diinstal. Pastikan pada daftar SDK terdapat
versi 6 seperti pada teks yang dicetak tebal. Buku ini menggunakan .NET 6 SDK
versi 6.0.101, namun dipersilakan jika menggunakan versi yang lebih baru.
.NET SDK (reflecting any global.json):
Version: 6.0.101
Commit: ef49f6213a

Runtime Environment:
OS Name: Windows
OS Version: 10.0.19043
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\6.0.101\

Host (useful for support):


Version: 6.0.1
Commit: 3a25a7f1cc

.NET SDKs installed:


3.0.103 [C:\Program Files\dotnet\sdk]
6.0.100-preview.3.21202.5 [C:\Program Files\dotnet\sdk]
6.0.101 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:


Microsoft.AspNetCore.All 2.1.25 [C:\Program
Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.25 [C:\Program
Files\dotnet\shared\Microsoft.AspNetCore.App]

Belajar C#: Panduan Lengkap LINQ│ 3


Microsoft.AspNetCore.App 3.0.3 [C:\Program
Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.12 [C:\Program
Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.3 [C:\Program
Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.0-preview.3.21201.13 [C:\Program
Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.1 [C:\Program
Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.25 [C:\Program
Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.3 [C:\Program
Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.12 [C:\Program
Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.3 [C:\Program
Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.0-preview.3.21201.4 [C:\Program
Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.1 [C:\Program
Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.0.3 [C:\Program
Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 3.1.12 [C:\Program
Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.3 [C:\Program
Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 6.0.0-preview.3.21201.3 [C:\Program
Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 6.0.1 [C:\Program
Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET runtimes or SDKs:


https://aka.ms/dotnet-download

Untuk mendapatkan daftar SDK saya maka dapat digunakan perintah berikut
ini.
dotnet --list-sdks

Dan untuk menampilkan daftar .NET Runtime maka dapat digunakan perintah
berikut ini.
dotnet --list-runtimes

Sedangkan untuk melihat daftar template project yang dapat dibuat dapat
dilakukan dengan perintah berikut.
dotnet new -l

Keluaran dari perintah ini dapat dilihat pada Gambar 3.

4 │ M Reza Faisal & Erick Kurniawan


Gambar 3. Daftar template project.
Berdasarkan daftar tempate project tersebut maka perintah dotnet juga
digunakan untuk membuat project. Berikut adalah sintaks untuk membuat
project.
dotnet new [Short Name] -lang [Language] -o [Nama Folder]

Misal untuk membuat project Console App dengan bahasa C# dan disimpan
pada folder ContohC# maka ditulis perintah sebagai berikut.
dotnet new console -o ContohC#

Pada perintah di atas tidak digunakan opsi -lang karena jika diperhatikan pada
Gambar 3 bahwa default bahasa pemrograman C#. Contoh lain misal ingin
dibuat project Console App dengan menggunakan bahasa pemrograman F#
dan disimpan ke folder CalculatorF# maka digunakan perintah berikut ini.
dotnet new console -lang F# -o CalculatorF#

Contoh yang lain adalah untuk membuat aplikasi ASP.NET Core Empty
dengan bahasa pemrograman C# dan disimpan ke dalam folder Website maka
digunakan perintah berikut ini.
dotnet new web -o Website

Setelah project dibuat maka untuk menjalankan project tersebut dapat


dilakukan dengan menggunakan perintah berikut ini.
dotnet run

Belajar C#: Panduan Lengkap LINQ│ 5


Misal untuk menjalankan project ContohC# maka buka Command Prompt,
kemudian masuk ke folder project ContohC# tersebut dengan menggunakan
perintah cd. Kemudian ketik perintah di atas.

Cara kedua, masuk ke folder project (misal ContohC#) pada Windows Explorer
seperti yang terlihat pada Gambar 4.

Gambar 4. Windows Explorer – ContohC#.


Kemudian ketik perintah cmd pada kolom yang ditunjuk oleh panah. Setelah
tombol Enter ditekan makan secara otomatis akan ditampilkan window
Command Prompt seperti pada Gambar 5. Setelah itu tinggal dilanjutkan
mengetik perintah dotnet run. Maka akan dilakukan kompilasi dan
menjalankan program hasil kompilasi, dan hasilnya dapat dilihat pada gambar
tersebut.

Gambar 5. Command Prompt – ContohC#.


Sedangkan untuk menjalankan project Website dapat dilakukan dengan cara
yang sama, yaitu dengan masuk terlebih dahulu ke folder project tersebut dan
ketikkan perintah dotnet run seperti yang terlihat pada Gambar 6.

6 │ M Reza Faisal & Erick Kurniawan


Gambar 6. Command Prompt – Website.
Untuk project Website, setelah kompilasi berhasil maka program dijalankan
sebagai service yang dapat diakses via HTTP atau HTTPS. Berdasarkan Gambar
6, untuk akses via HTTP menggunakan alamat http://localhost:5292. Gunakan
alamat tersebut untuk diakses dengan menggunakan web browser.

C#
Bahasa pemrograman yang didukung .NET adalah C#, Visual Basic dan F#. C#
dibaca dengan See Sharp. C# adalah bahasa pemrograman berorientasi obyek
yang modern dan type-safe. Bahasa ini merupakan keluarga bahasa
pemrograman C seperti bahasa pendahulunya seperti C, C++, atau Java.
Sehingga bagi pembaca yang telah terbiasa dengan bahasa C++ atau Java dapat
dengan mudah untuk belajar dan mengerti bahasa C#.

Bahasa C# dapat dibilang merupakan campuran dari kemampuan beberapa


bahasa sehingga bahasa ini dianggap penulisannya sebersih Java, sederhana
seperti Visual Basic dan sekuat dan fleksible seperti C++. C# juga mendukung
fitur-fitur yang sudah dikenal dalam bahasa pemrograman lain seperti LISP
atau Haskel. Fitur-fitur tersebut seperti lambda expression dan anonymous
type. Dan fitur lainnya adalah Language Integrated Query (LINQ).

Saat buku ini ditulis, C# telah mencapai versi 10. Buku ini akan memanfaatkan
fitur-fitur yang telah dimiliki pada versi ini. Jadi diharapkan pembaca dapat
memperhatikan hal ini saat menjalankan contoh-contoh yang diberikan.

Belajar C#: Panduan Lengkap LINQ│ 7


LINQ
LINQ adalah singkatan dari Language Integrated Query. LINQ merupakan
kumpulan teknologi yang berbasis pada integrasi kemampuan query langsung
pada bahasa pemrograman C#. Pada kode program, umumnya query ditulis
sebagai string dan dipergunakan mengolah data dari database seperti yang
dapat dilihat pada kode di bawah ini. Pada baris ke-9 dapat dilihat variable sql
yang berisi string query untuk melakukan operasi data pada database.

1 using System.Data.SqlClient;
2
3 var conn_str = "Data Source=;Initial Catalog=;Persist
4 Security Info=True;User ID=;Password=";
5
6 var conn = new SqlConnection(conn_str);
7 conn.Open();
8
9 var sql = "select * from students";
10 SqlCommand command = new SqlCommand(sql, conn);

Sedangkan LINQ memberikan kemampuan untuk menulis query sebagai


bagian dari bahasa pemrograman seperti contoh kode di bawah ini. Pada baris
ke-3 dapat dilihat contoh query terhadap data yang disimpan pada variable
array numbers.

1 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
2
3 var lowNums = from num in numbers select num;
4
5 foreach (var x in lowNums)
6 {
7 Console.WriteLine(x);
8 }

Karena query pada LINQ merupakan bagian dari bahasa pemrograman maka
saat menulis query akan ada bantuan dari fitur IntelliSense untuk membantu
melengkapi kode yang ditulis, selain itu juga ada pengecekan saat dilakukan
kompilasi. Kedua hal tersebut tentu berbeda dengan query yang ditulis sebagai
string.

Kelebihan LINQ yang lain adalah kemampuannya untuk melakukan query dari
sesuatu yang menyimpan data seperti database, XML, atau obyek. Pada buku
ini akan diberikan contoh penggunaan LINQ pada obyek, selain itu juga
diberikan contoh pengguan Entity Framework Core (EF Core) untuk
melakukan query ke database.

8 │ M Reza Faisal & Erick Kurniawan


Entity Framework Core
Entity Framework Core (EF Core) adalah framework Object/Relational
Mapping yang membantu pengembang software untuk bekerja dengan
database dengan menggunakan obyek .NET. EF Core membantu
mempersingkat penulisan kode untuk akses dan operasi database.

EF dapat digunakan untuk melakukan operasi data pada banyak jenis database
dengan cara yang sama. Yang membedakan adalah pada cara melakukan
koneksi saja yang memerlukan driver yang spesifik untuk database yang
digunakan. Dengan mengubah kode untuk melakukan koneksi sesuai dengan
database yang dituju maka kode untuk query dengan tujuan create, retrieve,
update dan delete dapat langsung digunakan tanpa diubah.

Tool Development
Saat ini telah dikembangkan berbagai tool development atau code editor untuk
menulis kode aplikasi berbasis .NET. Secara umum tool ini diinstall terlebih
dahulu pada komputer. Sekarang juga tersedia versi online dari editor
sederhana dengan fasilitas untuk menjalankan kode yang ditulis. Berikut ini
adalah beberapa tool yang dapat digunakan untuk mencoba contoh-contoh
kode yang diberikan pada buku ini.

Visual Studio

Gambar 7. Visual Studio.

Belajar C#: Panduan Lengkap LINQ│ 9


Visual Studio adalah tool development atau integrated development
environment (IDE) untuk mengembangkan aplikasi berbasis teknologi
Microsoft. Microsoft telah mengembangkan Visual Studio dari tahun 1997
dengan nama Visual Studio 97 (Gambar 8).

Gambar 8. Visual Studio 97.


Versi terakhir saat buku ini dibuat adalah Visual Studio 2022 (VS 2022) sehingga
saat ini Visual Studio telah berusia 25 tahun (Gambar 7). Saat ini VS 2022 dapat
digunakan pada sistem operasi Windows dan MacOS. VS 2022 merupakan IDE
(Gambar 9) yang dapat digunakan untuk mengembangkan aplikasi web,
console, desktop, cloud, mobile, game, IoT dan lain-lain dengan menggunakan
pilihan bahasa pemrograman yang beragam yaitu C#, Visual Basic, F#, Python,
Node.js dan lain-lain.

Gambar 9. VS 2022.

10 │ M Reza Faisal & Erick Kurniawan


Selain itu juga dikembangkan Visual Studio Code (VS Code) yang merupakan
code editor yang dapat digunakan pada sistem operasi Windows, Linux dan
MacOS (Gambar 10). Berbeda dengan VS2022, VS Code memiliki fitur
minimalis seperti fitur editor teks dan compiler. Sedangkan hal lain seperti
untuk mendeploy aplikasi ke web server atau emulator mesti dikonfigurasi
secara mandiri.

Gambar 10. VS Code.


Visual Studio 2022 dan Visual Studio Code merupakan tool yang harus diinstall
pada komputer untuk bisa digunakan. Untuk menginstall VS2022 atau VS Code
maka file installernya dapat diunduh pada link berikut:

https://visualstudio.microsoft.com/downloads/

Untuk VS 2022 terdapat 3 pilihan versi yaitu:

- Enterprise.
- Professional.
- Community.
Versi Enterprise dan Profesional adalah versi yang berbayar sedangkan versi
Community dapat digunakan secara gratis. Untuk melihat perbedaan antara
ketiganya dapat melihat informasi pada link berikut ini.

https://visualstudio.microsoft.com/vs/compare/

Belajar C#: Panduan Lengkap LINQ│ 11


Try .NET
Untuk mencoba kode pada buku ini secara langsung tanpa melakukan installasi
tool development seperti VS 2022 atau VS Code dapat menggunakan bantuan
web dengan alamat https://try.dot.net dengan antarmuka sederhana seperti
terlihat pada Gambar 11.

Gambar 11. Try .NET.


Web ini memiliki fitur untuk menulis kode dan menjalankannya. Namun kode
yang dapat ditulis hanya kode sederhana saja seperti kode program console.

Source Code
Contoh kode yang ditulis pada buku ini dapat dilihat pada link berikut ini:

https://github.com/rezafaisal/BelajarLINQ.

Sebagai informasi, jika tautan di atas diakses pada web browser maka dapat
dilihat antarmuka seperti pada Gambar 12.

12 │ M Reza Faisal & Erick Kurniawan


Gambar 12. Github – BelajarLINQ.
Jika .com pada https://github.com/rezafaisal/BelajarLINQ diubah menjadi
.dev tampilan diatas akan memiliki antarmuka seperti Visual Studio Code
seperti yang dapat dilihat pada Gambar 13.

Gambar 13. Visual Studio Code Online – BelajarLINQ.

Belajar C#: Panduan Lengkap LINQ│ 13


2
Hello World!

Pada bab ini diberikan contoh membuat project dengan bahasa pemrograman
C# sederhana dengan menggunakan VS 2022, VS Code dan Try .NET.

Hello Visual Studio 2022


Pada sub bab ini akan dicontohkan langkah-langkah untuk membuat Solution,
Project dan menulis kode untuk menampilkan kalimat “Hello World”.

Gambar 14. VS 2022 – Halaman Depan.


Langkah pertama adalah membuat Solution. Jalankan VS 2020, pada halaman
depan dapat dilihat antarmuka seperti pada Gambar 14. Pada area sebelah kiri
menampilkan daftar project yang telah dibuat dan digunakan. Sedangkan pada
area kanan menampilkan menu. Untuk membuat Solution atau Project baru
pilih “Create a new project”.

Kemudian akan ditampilkan daftar template project seperti yang diperlihatkan


pada Gambar 15. Ketik “blank” pada kolom pencarian. Kemudian dapat dilihat
daftar Blank Solution (Create an empty solution containing no project).

14 │ M Reza Faisal & Erick Kurniawan


Gambar 15. VS 2022 – Daftar template project.
Klik pada Blank Solution dan pilih tombol Next. Pada window Configure your
new project, ketik BelajarLINQ sebagai isi dari nilai Solution name. Kemudian
pada Location dapat dipilih lokasi menyimpan file-file Solution. Kemudian klik
tombol Create.

Gambar 16. VS 2022 – Memberi nama solution.

Belajar C#: Panduan Lengkap LINQ│ 15


Gambar 17. VS 2020 – Halaman kerja.
Pada halaman kerja di Gambar 17 dapat dilihat solution BelajarLINQ pada area
Solution Explorer di area bagian kanan atas. sebuah solution dapat berisi
banyak project. Untuk menambah project pada solution dapat dilakukan
dengan klik kanan pada Solution ‘BelajarLINQ’ kemudian pilih Add > New
Project.

Gambar 18. VS 2022 – Window daftar template project.

16 │ M Reza Faisal & Erick Kurniawan


Pada Gambar 18 ditampilkan window Add a new project. Pada window ini
ditampilkan tipe project untuk berbagai bahasa pemrograman, platform dan
tipe project. Sebagai latihan, pilih Console App dengan:

- Bahasa pemrograman adalah C#,


- Platform adalah Linux, MacOS dan Windows.
- Tipe project adalah Console.
Kemudian klik tombol Next.

Gambar 19. VS 2022 – Memberi nama project.


Pada kolom isian Project name isi dengan HelloWorldConsole. Biarkan lokasi,
jangan diubah agar lokasi project berada di dalam folder di dalam Solution.
Kemudian klik tombol Next. Selanjutkan akan ditampilkan window Additional
information, tidak perlu mengubah opsi yang ada. Lanjutkan dengan klik
tombol Create.

Pada Solution Explorer dapat dilihat tambahan sebuah project dengan nama
HelloWorldConsole. Pada project ini berisi Dependencies dan file Program.cs.
Dan secara otomatis juga ditampilkan file Program.cs pada area code editor
seperti yang terlihat pada Gambar 20.

Belajar C#: Panduan Lengkap LINQ│ 17


Gambar 20. VS 2022 – Code editor.
Pada kode Program.cs hanya terlihat satu baris saja. Ini merupakan struktur
kode program tipe Console baru pada VS 2022. Struktur ini akan berbeda saat
ditulis pada VS Code atau Try .NET.

Untuk menjalankan atau mengeksekusi project HelloWorldConsole dapat


dilakukan dengan cara klik kanan pada project tersebut di Solution Explorer.
Kemudian pada context menu pilih Debug > Start New Instance. Maka secara
otomatis akan ditampikan window command prompt atau console seperti pada
Gambar 21. Pada window console tersebut dapat dilihat keluaran dari program
yang ditulis.

Gambar 21. Console.

18 │ M Reza Faisal & Erick Kurniawan


Seperti yang disebutkan di atas bahwa sebuah Solution dapat berisi beberapa
project. Saat membuat sebuah solusi misal solusi Sistem Informasi Rumah Sakit,
maka didalamnya mungkin dibuat beberapa tipe aplikasi seperti:

- Aplikasi web sebagai backend.


- Aplikasi web sebagai frontend yang mengakses backend.
- Aplikasi mobile yang juga memanfaatkan backend.
Artinya dalam satu Solution dapat diisi dengan 3 project yang setiap project
merupakan aplikasi yang disebutkan di atas.

Untuk menambahkan project kedua (atau seterusnya) pada Solution dapat


dilakukan dengan cara yang sama saat menambahkan project pertama pada
Solution. Klik kanan pada Solution ‘BelajarLINQ’ kemudian pilih Add > New
Project pada context menu.

Pada window “Add a new project” (Gambar 22), pilih C# pada dropdown “All
Languages” dan pilih Desktop pada dropdown “All project types”. Tujuan hal
tersebut adalah untuk memfilter daftar template project.

Gambar 22. VS 2022 – Windows Form App.


Kemudian pada daftar template project pilih Windows Forms App dan
dilanjutkan dengan mengklik tombol Next. Selanjutnya window Configure
your new project akan ditampilkan (Gambar 23).

Belajar C#: Panduan Lengkap LINQ│ 19


Gambar 23. VS 2022 – HelloWorldWinForms.
Tulis HelloWorldWinForms sebagai nama dari project ini. Kemudian klik
tombol Next. Pada window selanjutnya klik tombol Create. Hasilnya dapat
dilihat pada Gambar 24, terdapat perubahan pada area code editor yang
menjadi visual design dan pada area sisi sebelah kiri dapat dilihat area Toolbox
yang berisi komponen-komponen untuk membuat aplikasi desktop.

Gambar 24. VS 2022 – Project HelloWorldWinForm.

20 │ M Reza Faisal & Erick Kurniawan


Dan pada area Solution Explorer dapat dilihat tambahan project yang baru saja
dibuat. Untuk menjalankan project HelloWorldWinForm, klik kanan pada
project tersebut di Solution Explorer kemudian pilih Debug > Start New
Instance.hasilnya dapat dilihat padaGambar 25 .

Gambar 25. VS 2022 – Menjalankan project HelloWorldWinForm.


Pada Gambar 25 dapat dilihat window di area tengah yang keluar sebagai
aplikasi yang dijalankan. kemudian antarmuka VS 2022 juga mengalami
perubahan dimana pada area sebelah kiri menjadi Diagnostic Tool yang
memberikan informasi penggunaan memory, CPU dan resource lain dari
aplikasi yang sedang berjalan.

Dari contoh di atas dapat dilihat bagaimana VS 2022 bukan hanya sebagai code
editor, compiler dan untuk mengeksekusi project namun juga terdapat tool-tool
yang membantu jalankan aplikasi.

Hello Visual Studio Code


Ada perbedaan cara antara bekerja dengan VS 2022 dengan VS Code.

Folder
Berikut langkah-langkah untuk menulis dan menjalankan kode C# pada VS
Code.

Belajar C#: Panduan Lengkap LINQ│ 21


Langkah pertama adalah membuat folder, sebagai latihan dibuat folder dengan
nama BelajarLINQVSCode. Folder ini dapat difungsikan sebagai Solution
seperti yang dicontohkan pada sub bab yang membahas VS 2022. Folder ini
dapat diisi dengan project-project. Untuk membuat project digunakan perintah
pada command prompt. Perintah-perintah ini tidak ada hubungannya dengan
VS Code, karena perintah yang digunakan adalah bagian dari .NET SDK. Pada
sub bab sebelumnya telah diberikan contoh membuat project dengan perintah
dotnet.

Misal dibuat project consode yang menggunakan bahasa pemrograman C#


dengan nama folder HelloWorldConsole maka digunakan perintah berikut ini.
dotnet new console -o HelloWorldConsole

Hasilnya dapat dilihat berupa folder HelloWorldConsole di dalam folder


BelajarLINQVSCode.

Jalankan VS Code, kemudian buka folder HelloWorldConsole dengan


mengklik menu File > Open Folder, dan hasilnya dapat dilihat pada Gambar
26. Pada folder tersebut dapat dilihat file Program.cs, klik dua kali pada file
tersebut untuk menampilkannya pada code editor.

Gambar 26. VS Code - Project HelloWorldConsole.


Project yang dibuat di atas adalah project dengan bahasa pemrograman C#, jika
file Program.cs dibuka maka secara otomatis VS Code akan memberikan
informasi untuk menginstall C# extension. Jadi pastikan untuk terkoneksi ke
internet agar bisa dilakukan installasi extension ini.

22 │ M Reza Faisal & Erick Kurniawan


Installasi extension juga dapat dilakukan secara mandiri dengan mengklik
tombol Extensions yang ada pada sisi kiri (tombol ke-6 dari atas), atau
perhatikan tombol aktif pada Gambar 27. Maka akan ditampilkan daftar
extension yang telah diinstal seperti yang terlihat pada Gambar 27.

Gambar 27. VS Code – Extensions.


Jika extension ini belum diinstall maka dengan cara menulis kata kunci “C#”
pada kolom pencarian. Kemudian pilih extension C# tersebut, dan klik tombol
Install.

Untuk menjalankan project ini dapat dilakukan dengan klik Terminal yang
ditunjuk oleh panah pada Gambar 26. Setelah itu ketikan perintah dotnet run
pada command line. Hasilnya juga dapat dilihat pada terminal tersebut, contoh
keluarannya dapat dilihat pada Gambar 26.

Contoh lain adalah membuat project Windows Forms dengan bahasa


pemrograman C# dengan nama project adalah HelloWorldWinForms. Maka
ketikkan perintah berikut pada Command Prompt saat berada di folder
BelajarLINQVSCode.

Kemudian pada VS Code buka folder tersebut dengan menggunakan cara yang
sama seperti yang telah dicontohkan sebelumnya. Kemudian klik dua kali pada
file Program.cs. Kemudian jalankan project ini dengan cara yang sama seperti
sebelumnya. Hasilnya dapat dilihat pada Gambar 28, ditampilkan hasil project
berupa window.

Belajar C#: Panduan Lengkap LINQ│ 23


Gambar 28. VS Code – HelloWorldWinForms.

Workspace
Cara lain bekerja dengan VS Code agar mudah mengelola beberapa project
adalah dengan membuat workspace. Berikut ini adalah langkah-langkah yang
dapat diikuti. Buka VS Code dan pastikan tidak ada folder atau workspace yang
tengah dibuka.

Gambar 29. VS Code – belajar-linq-workspace.code-workspace.


Untuk membuat workspace pilih File > Save Worskpace As, kemudian buat
folder BelajarLINQVSCodeWS dengan memilih tombol New Folder pada

24 │ M Reza Faisal & Erick Kurniawan


window yang sedang aktif. Kemudian klik dua kali pada folder tersebut dan
beri nama file dengan nama belajar-linq-workspace.code-workspace kemudian
akhiri dengan mengklik tombol Save.

Selanjutnya adalah membuat project dengan cara menambahkan folder ke


dalam workspace. Caranya dengan memilih File > Add Folder to Workspace.
Kemudian cari lokasi folder BelajarLINQVSCodeWS, dan tambahkan folder
HelloConsole dengan mengklik tombol New Folder. Setelah folder dibuat, klik
dua kali pada folder tersebut. Dan dilanjutkan dengan mengklik tombol Add.
Untuk melihat hasilnya klik tombol Explorer (tombol pertama) di daftar tombol
yang ada di sisi kiri VS Code. Pada Gambar 30 dapat dilihat folder
HelloConsole.

Gambar 30. VS Code – HelloConsole.


Folder HelloConsole masih kosong, untuk mengisi dengan template project
yang diinginkan maka lakukan hal berikut ini. Klik kanan pada folder
HelloConsole, kemudian pilih Open in Integrated Terminal. Jika folder tersebut
ingin diisi dengan project console maka ketikkan perintah berikut ini.
dotnet new console

Hasilnya dapat dilihat di dalam folder tersebut, ada tambahan file dan folder
seperti yang dapat dilihat pada Gambar 31. Lakukan langkah-langkah untuk
membuat folder dan project jika ingin menambahkan project baru ke dalam
workspace.

Belajar C#: Panduan Lengkap LINQ│ 25


Gambar 31. VS Code – HelloConsole – Program.cs.

.NET Interactive Notebook


.NET Interactive Notebook memungkinkan VS Code untuk menulis kode
program dan melihat hasilnya dalam sebuah halaman. Bagi pembaca yang telah
mengenal Python dengan Jupyter Notebook maka .NET Interactive Notebook
mempunyai hal yang sama.

Gambar 32. VS Code - .NET Interactive Notebooks.

26 │ M Reza Faisal & Erick Kurniawan


Untuk menggunakan .NET Interactive Notebooks maka terlebih dahulu mesti
diinstall extensionnya dengan mengklik tombol Extension kemudian pada
kolom pencarian ketikkan kata kunci “.net interactive” maka dapat dilihat
hasilnya seperti pada Gambar 32. Klik tombol Install. Setelah tunggu sampai itu
proses download dan installasi.

Untuk memulai membuat notebook lakukan langkah-langkah berikut ini.


Pastikan semua folder dan workspace ditutup. Kemudian pilih View >
Command Pallete pada menu atau tekan tombol Ctrl + Shift + P. Pada
Command Pallete ketik “.net interactive” dan pilih “.NET Interactive Create
new blank notebook” seperti pada

Gambar 33. VS Code – Create new blank notebook.

Kemudian klik Create as ‘.dib’, dilanjutkan pilih bahasa pemrograman, pada


kasus ini pilih C#. Setelah itu simpan file tersebut dengan nama yang
diinginkan.

Untuk mengetik kode C# tulis pada area warna abu-abu. Untuk menjalankan
kode tersebut klik tombol “Execute Cell” seperti yang ditunjuk oleh panah
hitam di sebelah kiri seperti yang dilihat pada Gambar 34. Sedangkan untuk
menjalankan seluruh kode pada notebook klik tombol Run All yang berada di
bagian atas notebook.

Untuk menulis kode baru maka klik tombol “Add Node Cell” dengan lambang
“+ Code” seperti ditunjuk oleh panah hitam di sebelah kanan bawah.

Belajar C#: Panduan Lengkap LINQ│ 27


Gambar 34. VS Code – Menulis dan menjalankan kode.

Hello Try .NET


Saat buku ini ditulis, Try .NET (https://try.dot.net/) menggunakan .NET SDK
yang berbeda jika dibandingkan dengan .NET 6 SDK. Sehingga ada perbedaan
penulisan kode C#.

Jika sebelumnya untuk menulis sebaris kalimat “Hello, World!” digunakan


sebaris kode berikut.

Console.WriteLine("Hello, World!");

Maka pada Try .NET untuk menulis output yang sama digunakan kode seperti
berikut ini. Template kode ini merupakan struktur kode C# dari versi .NET
sebelumnya.

using System;

public class Program


{
public static void Main()
{
Console.WriteLine("Hello, World!");
}
}

Salin kode di atas ini pada area editor di web broser yang telah mengakses web
Try .NET seperti pada.

28 │ M Reza Faisal & Erick Kurniawan


Gambar 35. Try .NET – Hello, World!
Untuk menjalangkan kode tersebut, klik tombol Run maka hasilnya
ditampilkan di area bawah tombol tersebut. Dan untuk menggunakan editor
Try .NET ini kita mesti selalu terhubung dengan internet karena kompilkasi dan
proses menjalankan kode dilakukan di server.

Hello C#
Secara umum kode program yang ditulis dengan bahasa C# mempunyai aturan
yang mirip dengan bahasa berorientasi obyek seperti Java dan lainnya yaitu
seperti kode di bawah ini.

Kode 1. Kode C# .NET Core 3.


using System;

namespace HelloWorldNet3
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

Belajar C#: Panduan Lengkap LINQ│ 29


Dalam bahasa C# dikenal istilah block dari kode program dimana digunakan
penanda { dan }.

Pada sebuah file kode C# terdapat tiga block yaitu:

- namespace menampung dan berisi beberapa class, dan mempunyai


fungsi untuk mengelompokkan class-class.
- class berisi daftar obyek dan method.
- method berisi statement yang melakukan implementasi sebuah aksi
dari obyek.
Selain itu pada kode C# terdapat statement dengan menggunakan keyword
using yang berfungsi untuk menggunakan suatu namespace sehingga dapat
digunakan class-class didalamnya.

Pada kode di atas nama namespace adalah HelloWorldNet3. Pada namesapce


ini terdiri atas sebuah class yaitu Program. Sesuai dengan nama class maka kode
ini disimpan ke dalam file Program.cs. Dan di dalam class tersebut terdapat
sebuah method yaitu Main. Sebagai informasi kode di atas adalah project
console yang dibuat dengan menggunakan .NET Core 3.

Sedangkan jika project console yang dibuat menggunakan .NET 6 maka


kodenya akan menjadi seperti berikut ini.

Kode 2. Kode C# .NET 6.


Console.WriteLine("Hello, World!");
Perbedaan kode ini dengan di atas adalah tidak adanya block namespace, class
dan method. Perbedaan ini terjadi karena penyederhanaan untuk template
project ini. Selain itu penggunaan keyword using tidak ditulis di setiap kode
program namun dipusatkan ke sebuah file untul global using.

Pada VS 2022, untuk melihat file yang menyimpan file global using dapat
dilakukan dengan mengklik tombol “Show All Files” seperti ditunjuk oleh panh
bagian atas di Gambar 36. Kemudian pada pilih folder obj > Debug > net6.0
dan file adalah HelloWorldConsole.GlobalUsings.g.cs seperti yang
ditunjuk oleh panah di bawah pada Gambar 36.

30 │ M Reza Faisal & Erick Kurniawan


Gambar 36. File global using.
Berikut adalah isi dari file HelloWorldConsole.GlobalUsings.g.cs.

Kode 3. HelloWorldConsole.GlobalUsings.g.cs.
HelloWorldConsole.GlobalUsings.g.cs
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;
Seperti yang telah disebutkan di atas, bahasa pemrograman C# dapat
digunakan untuk membuat banyak tipe aplikasi atau project. Selain aplikasi
atau project console juga dapat digunakan untuk membangun aplikasi
Windows Forms atau Web.

Jika dibandingkan dengan pada project Windows Forms maka kode C#


memiliki perbedaan seperti yang dapat dilihat pada Kode 4.

Belajar C#: Panduan Lengkap LINQ│ 31


Kode 4. Program.cs project Windows Forms.
Program.cs
namespace HelloWorldWinForm
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as
//set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

Pada Kode 4 dapat dilihat aturan untuk menulis kode program mengikuti
aturan block yang telah disebutkan pada penjelasan di atas. Pada kode ini juga
tidak dilihat penggunaan keyword using, karena penggunaannya ditulis pada
sebuah file dengan nama HelloWorldWinForm.GlobalUsings.g.cs yang
disimpan pada folder obj > Debug > net6.0. Pada Kode 5 dapat dilihat isi dari
file ini.

Kode 5. HelloWorldWinForm.GlobalUsings.g.cs.
HelloWorldWinForm.GlobalUsings.g.cs
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

Dari contoh fileHelloWorldConsole.GlobalUsings.g.cs dan


HelloWorldWinForm.GlobalUsings.g.cs dapat dilihat bahwa nama file
untuk menyimpan global using ini memiliki format penamaan secara default
seperti berikut.
NamaProject.GlobalUsing.g.cs

32 │ M Reza Faisal & Erick Kurniawan


Selain itu dari contoh-contoh di atas juga diketahui bahwa setiap template
project memungkinkan untuk memiliki struktur kode C# yang berbeda.

Hello LINQ
Pada buku ini contoh-contoh kode program akan ditulis sebagai project
console. Contoh kode LINQ yang diberikan adalah untuk melakukan query
data. Data bisa berbentuk array atau collection.

Kode 6. Data array of string.


1 string words = "i am studying C# programming language";
2
3 var query = from word in words.Split(" ") select word;
4
5 foreach(var word in query)
6 {
7 Console.WriteLine(word);
8
9 }

Contoh penggunakan LINQ dapat dilihat padaKode 6. Pada baris ke-1 dapat
dilihat variable words yang berisi kalimat. Kemudian pada baris ke-3 dapat
dilihat kode LINQ. Contoh yang lain dapat dilihat pada Kode 7.

Kode 7. Data array of integer.


1 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
2
3 var q1 = from number in numbers select number;
4
5 foreach (var number in q1)
6 {
7 Console.Write($"{number} ");
8
9 }
Data pada Kode 7 adalah array yang berisi integer yang disimpan pada variable
numbers seperti yang terlihat pada baris ke-1. Sedangkan query dengan
menggunakan LINQ dapat dilihat pada baris ke-3.

Bagi pembaca yang telah mengenal operasi database dengan SQL pasti telah
mengenal query seperti berikut. Dimana NAMA_TABEL sebagai sumber data, dan
tanda * bertujuan untuk menampilkan seluruh kolom pada tabel.
select * from NAMA_TABEL

Belajar C#: Panduan Lengkap LINQ│ 33


Dari kode di atas dapat diartikan bahwa data dipilih terlebih dahulu dengan
keyword select kemudian baru ditentukan sumber datanya dengan keyword
from. Dari kedua contoh query LINQ yang di atas maka terlihat perbedaan
dengan query SQL. Secara umum query LINQ memiliki format sebagai berikut.
from datum in data select datum

Di sini bisa dilihat aturan penulisannya terbalik jika dibandingkan dengan


query SQL, dimana keyword from ditulis lebih dahulu dibandingkan keyword
select. Hal ini dimaksudnya untuk memilih sumber data terlebih dahulu
dengan keyword from. Pada kode di atas, sumber data ditulis sebagai berikut.
datum in data

Dimana data adalah nama variable yang menyimpan data baik berupa array
atau collection. Pada Kode 6 nama variable adalah words dan Kode 7 nama
variablenya adalah numbers. Sedangkan datum adalah sebuah nama obyek
yang disimpan di dalam data, nama datum dapat diberi dengan nama yang
diinginkan.

Setelah keyword select adalah obyek datum. Jika ditulis obyek datum yang
ditulis artinya akan ditampilkan seluruh property yang dimiliki oleh obyek
tersebut.

Gambar 37. Window Add New Item – HelloLINQ.


Pada kedua contoh di atas masih menggunakan array yang berisi obyek
primitif, selanjutnya akan dicontohkan data dari collection yang berisi obyek
dari class. Berikut adalah langkah-langkah yang harus diikuti. Langkah

34 │ M Reza Faisal & Erick Kurniawan


pertama adalah membuat file class dengan cara klik kanan pada project
kemudian pilih Add > New Item. Kemudian akan ditampilkan window seperti
pada Gambar 37. Pilih Class kemudian isi Student.cs pada kolom nama file.
Setelah itu klik tombol Add.

Kemudian isi file Student.cs dengan kode seperti pada Kode 8. Pada file ini
ditambahkan dua class yaitu Student dan Faculty.

Kode 8. Student.cs.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloLINQ
{
public class Student
{
public int StudentId { get; set; }
public int FacultyId { get; set; }
public string StudentName { get; set; }
}

public class Faculty


{
public int FacultyId { get; set; }
public string FacultyName { get; set; }
}
}

Pada kode di atas dapat dilihat terdapat dua block yaitu namespace dan class.
Selanjutnya untuk menggunakan kedua class ini pada file Program.cs maka
perlu ditambahkan baris berikut di baris pertama seperti pada Kode 9.
Kemudian ditambahkan method GetStudentList yang berfungsi untuk
membuat collection yang berisi obyek dari class Student. Selanjutnya
dilakukan query dengan LINQ seperti yang dapat dilihat pada baris ke-25.
Obyek data pada baris tersebut didapat dari keluaran method
GetStudentList. Obyek datum pada query tersebut adalah s. Kemudian
setelah keyword select dapat dilihat ditulis obyek yang sama yaitu s, hal ini
bertujuan untuk memilih seluruh property yang dimiliki oleh obyek s yang
berasal dari class Student. Ini berarti akan didapat dilihat data dari property
StudentId, FacultyId dan StudentName. Hasil query LINQ disimpan ke
obyek queryStudent.

Belajar C#: Panduan Lengkap LINQ│ 35


Kode 9. Program.cs – Operasi data Student.
1 using HelloLINQ;
2
3 static List<Student> GetStudentList()
4 {
5 List<Student> list = new List<Student>();
6 list.Add(new Student {
7 StudentId = 1,
8 FacultyId = 1,
9 StudentName = "Budi"
10 });
11 list.Add(new Student {
12 StudentId = 2,
13 FacultyId = 2,
14 StudentName = "Wati"
15 });
16 list.Add(new Student {
17 StudentId = 3,
18 FacultyId = 1,
19 StudentName = "Iwan"
20 });
21
22 return list;
23 }
24
25 var queryStudent = from s in GetStudentList() select s;
26
27 foreach (var s in queryStudent)
28 {
29 Console.WriteLine($"{s.StudentId} {s.FacultyId}
30 {s.StudentName}");
31 }

Selanjutnya data ditampilkan dengan cara seperti pada baris ke-27 sampai ke-
31. Pada baris ke-28 dapat dilihat obyek s dapat mengakses seluruh property
sesuai dengan property dari class Student.

Contoh terakhir adalah membuat dan mengakses collection yang berisi obyek
dari class Faculty seperti yang dapat dilihat pada Kode 10. Kode di bawah ini
memiliki kemiirpan alur seperti pada Kode 9, perbedaannya hanya pada class
yang digunakan yaitu Faculty dan nama method untuk membuat data yaitu
GetFacultyList.

Kode 10. Program.cs – Operasi data Faculty.


using HelloLINQ;

static List<Faculty> GetFacultyList()


{
List<Faculty> list = new List<Faculty>();

36 │ M Reza Faisal & Erick Kurniawan


list.Add(new Faculty {
FacultyId = 1,
FacultyName = "Computer Science"
});
list.Add(new Faculty {
FacultyId = 2,
FacultyName = "Mathematics"
});
list.Add(new Faculty {
FacultyId = 3,
FacultyName = "Physics"
});

return list;
}

var queryFaculty = from faculty in GetFacultyList() select


faculty;

foreach (var s in queryFaculty)


{
Console.WriteLine($"{s.FacultyId} {s.FacultyName} ");
}

Selanjutnya data dari obyek words, number, GetStudentList dan


GetFacultyList akan digunakan pada contoh-contoh pada bab selanjutnya.
Kode lengkap dari contoh sub bab Hello LINQ ini dapat dilihat pada source
code pada project HelloLINQ. Dan pada bab selanjutkan akan dibahas
operator-operator pada query LINQ.

Belajar C#: Panduan Lengkap LINQ│ 37


3.
Entity Framework Core

Pada bab ini akan dijelaskan bagaimana membuat kode koneksi ke database
dan membuat class model secara otomatis berdasarkan konsep Database First
dengan Entity Framework (EF). Database yang digunakan pada bab ini adalah
MySQL dan SQL Server. Namun pada bab ini tidak membahas EF secara detail,
pembahasan hanya akan untuk melakukan query data awal saja. Hal ini akan
menjadi sumber data yang akan digunakan pada bab-bab selanjutnya.

Pendahuluan
Entity Framework (EF) adalah mapper antara obyek dengan database untuk
digunakan pada teknologi .NET. EF mendukung query LINQ, penelurusan
perubahan, update, dan migrasi skema. EF dapat bekerja dengan banyak
database berbasis cloud atau on-premise yang ada seperti SQL Server, MySQL,
PostgreSQL, SQLite, Azure Cosmos DB dan lain-lain.

Versi pertama EF dikeluarkan pada tahun 2008 sebagai bagian dari .NET
Framework 3.5 SP1 dan Visual Studio 2008 SP1. Saat ini nama EF menjadi Entity
Framework Core (EF Core) yang merupakan bagian dari .NET Core atau yang
sekarang dikenal dengan nama .NET. Dan versi EF Core saat buku ini ditulis
adalah versi 6.

Class DbContext adalah class utama pada EF yang bertugas untuk melakukan
interaksi data sebagai obyek. Class ini akan berinteraksi dengan class model
dalam menulis dan mengeksekusi query, menampung keluaran query ke dalam
obyek, dan lain-lain.

Sedangkan class model adalah model conceptual dari domain aplikasi. Salah
satu realisasi domain aplikasi adalah dalam bentuk tabel-tabel pada database.
Sehingga umumnya class model merupakan representasi tabel-tabel tersebut.

Implementasi dan kode kedua class ini dapat dilihat pada sub bab Error!
Reference source not found. dan Error! Reference source not found..

38 │ M Reza Faisal & Erick Kurniawan


Menyiapkan Database
Pada sub bab ini akan diberikan langkah-langkah untuk menyiapkan database.
Database yang digunakan pada contoh ini adalah Northwind. Database ini
adalah database contoh yang dibuat oleh Microsoft untuk tutorial. Database ini
berisi data penjualan dari perusahaan yang disebut “Northwind Trader” yang
berisi data yang disimpan pada 14 table seperti customer, order, supplier,
employees dan lain-lain seperti yang terlihat pada Gambar 38.

Gambar 38. Northwind database (https://docs.yugabyte.com/latest/sample-


data/northwind/).

SQL Server
Bagi pembaca yang terbiasa menggunakan SQL Server maka dapat mengikuti
pembuatan database pada sub bab ini. Bagi yang belum pernah menggunakan
database SQL Server maka dapat terlebih dahulu untuk mengunduh dari link
berikut ini:

https://www.microsoft.com/en-us/sql-server/sql-server-downloads.

Belajar C#: Panduan Lengkap LINQ│ 39


Untuk mencoba SQL Server secara gratis dapat mendownload versi Developer
atau Express. Pada buku ini digunakan SQL Server versi Express. Setelah
dilakukan installasi maka untuk mengakses database seperti untuk
mempermudah membuat database, membuat tabel dan melakukan operasi
query data dapat dilakukan dengan bantuan SQL Server Management Studio
(SSMS).

Untuk mendownload SSMS dapat mengunjungi halaman berikut ini:

https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-
management-studio-ssms.

Setelah installasi selesai maka jalankan SSMS dengan memilih Microsoft SQL
Server Management Studio 18.

Gambar 39. SSMS – Konek ke SQL Server Express.


Untuk melakukan koneksi ke SQL Express digunakan Server name
.\SQLEXPRESS.

40 │ M Reza Faisal & Erick Kurniawan


Gambar 40. SSMS – Membuat tabel dan mengisi data.

Selanjutnya untuk membuat database Northwind, tabel dan mengisi data akan
digunakan SQL untuk SQL Server. Kode SQL yang digunakan untuk membuat
database Northwind pada buku ini didapat dari link berikut ini:

https://github.com/microsoft/sql-server-
samples/tree/master/samples/databases/northwind-pubs.

Gunakan file instnwnd.sql untuk membuat database Northwind. Setelah pada


SSMS klik tombol New Query seperti ditunjuk oleh panah hitam di bagian atas
pada Gambar 40. Kemudian salin kode SQL dari file instnwnd.sql. Dan terakhir
tombol Execute seperti yang ditunjuk oleh panah hitam.

Untuk melihat database Northwind, klik Databases pada tree menu di sebelah
kiri. Untuk melihat tabel-tabel pada database, klik pada Tables. Sedangkan
untuk melihat data dari sebuah tabel, klik kanan pada sebuah tabel (misal
Customer), kemudian pilih Select Top 1000 Rows. Hasilnya seperti dilihat pada
Gambar 41.

Belajar C#: Panduan Lengkap LINQ│ 41


Gambar 41. SSMS – Database Northwind, tabel dan data.

MySQL
Database MySQL yang digunakan pada buku ini adalah menggunakan paket
XAMPP. Installer XAMPP dapat didownload pada link berikut
https://www.apachefriends.org/download.html. Versi XAMPP yang
digunakan adalah XAMPP for Windows 7.4.27 dimana masih menggunakan
PHP 7. Yang wajib dipilih pada tahap installasi adalah PHP, Apache dan
MySQL (MariaDB).

Setelah proses installasi selesai maka jalankan XAMPP Control Panel dengan
tampilan seperti pada Gambar 42. Kemudian klik tombol Start, pada bagian
Apache dan MySQL. Jika service berhasil dijalankan maka tombol akan
berubah menjadi Stop.

42 │ M Reza Faisal & Erick Kurniawan


Gambar 42. XAMPP for Windows.
Kemudian download kode SQL untuk membuat tabel dan mengisi datanya dari
link Github berikut ini: https://github.com/dalers/mywind. Ada dua file SQL
yang diperlukan, yaitu:

- northwind.sql yang berisi kode SQL untuk membuat tabel.


- northwind-data.sql adalah file yang berisi kode SQL untuk mengisi
data.
selain itu juga dapat mengunduh kode SQL dari link berikut
https://code.google.com/archive/p/northwindextended/downloads. Nama
file kode SQL untuk database MySQL adalah Northwind.MySQL5.sql. Jika
menggunakan menggunakan file ini maka ada satu hal yang mesti dimodifikasi
pada kode tersebut, yaitu mengedit “Order Detail” menjadi “Order_Detail”.
Hal ini bertujuan agar tabel tersebut tidak ada spasi. Pada sub bab ini
digunakan file Northwind.MySQL5.sql karena lebih mendekati dengan
struktur tabel dari database SQL Server di sub sebelumnya. Selain itu cukup
digunakan sebuah file saja untuk membuat tabel sekaligus mengisi datanya.

Selanjutnya jalankan phpMyAdmin dengan cara mengetikkan alamat berikut


pada web browser: http://localhost/phpmyadmin/index.php.

Belajar C#: Panduan Lengkap LINQ│ 43


Gambar 43. phpMyAdmin – Membuat tabel.
Kemudian klik tombol SQL seperti yang terlihat pada lingkaran pada Gambar
43. Kemudian salin isi file Northwind.MySQL5.sql pada editor dan lanjutnya
dengan mengklik tombol Go. Refresh halaman web, maka dapat dilihat
database northwind pada daftar database di bagian sebelah kiri dan jika diklik
database maka dapat dilihat daftar tabel seperti yang terlihat pada Gambar 44.

Gambar 44. phpMyAdmin – Daftar tabel.


Kemudian klik salah satu tabel jika ingin memeriksa apakah data telah masuk
ke dalam tabel.

Kode SQL
Kode SQL yang disebutkan di atas juga akan kami simpan pada repositori
Github dengan link yang sudah disebutkan pada Bab 1

44 │ M Reza Faisal & Erick Kurniawan


Pendahuluan > Source Code. Kode SQL disimpan pada folder SQLScript pada
project DataAccess. Pada folder tersebut terdiri atas 2 file yaitu:

- Northwind.SQLServer.sql yang merupakan file SQL untuk membuat


database Northwind di database MS SQL Server.
- Northwind.MySQL5.sql yang merupakan file SQL untuk membuat
database Northwind di database MySQL Server.

Command Line
Pada sub bab ini akan diberikan langkah-langkah membuat class DBContext
dan Model untuk database MySQL dan SQL Server dengan cara command line
dengan menggunakan perintah dotnet.

MySQL
Langkah awal adalah mengunduh connector database MySQL untuk .NET
Core. Connector ini berfungsi sebagai driver melakukan koneksi ke database
MySQL. Installernya dapat diunduh pada link berikut ini:

https://dev.mysql.com/downloads/connector/net/8.0.html

Versi yang digunakan saat buku ini ditulis adalah Connector/NET 8.0.28.
Setelah installer diunduh, lakukan installasi.

Langkah selanjutnya adalah membuat project dengan template console dengan


perintah berikut ini pada command prompt.
dotnet new console -o DataAccess

Kemudian masuk ke folder tersebut dengan perintah berikut ini.


cd DataAccess

Selanjutnya adalah menginstall package-package pada project, pastikan


komputer telah terkoneksi ke internet karena akan ada proses download
package-package tersebut. Package yang pertama diinstall adalah MySQL EF
Core 5.0 dengan perintah berikut ini.
dotnet add package MySql.EntityFrameworkCore --version 5.0.10

Kemudian menginstall tool EF Core dan Design dengan dua perintah berikut
di bawah ini. Jalankan perintah satu per satu.

Belajar C#: Panduan Lengkap LINQ│ 45


dotnet add package Microsoft.EntityFrameworkCore.Tools --
version 5.0.15
dotnet add package Microsoft.EntityFrameworkCore.Design --
version 5.0.15

Dan dilanjutkan mengetikkan perintah berikut ini untuk mengunduh package-


package lain yang diperlukan oleh kedua package di atas.
dotnet restore

Kemudian pastikan service database MySQL telah aktif. Ketikkan perintah


berikut ini untuk membuat class DbContext dan Model secara otomatis dengan
perintah berikut.
dotnet ef dbcontext scaffold
"Server=localhost;Database=northwind;Uid=root;Pwd=;"
MySql.EntityFrameworkCore -o MySQL -f

Jika perintah dotnet ef tidak ditemukan maka terlebih dahulu lakukan


installadi tool ini dengan perintah berikut.
dotnet tool install --global dotnet-ef

Sintaks dari perintah di atas adalah sebagai berikut.


dotnet ef dbcontext scaffold "connection-string"
MySql.EntityFrameworkCore -o output_folder -f

connection-string adalah cara untuk melakukan koneksi ke database, yang


terdiri atas atribut-atribut berikut ini:

- Server berisi nama domain name atau ip address dari komputer


database server. Pada contoh ini digunakan nilai localhost.
- Database berisi nama database, pada contoh ini nama databasenya
adalah northwind2.
- Uid berisi nama user untuk mengakses database server, pada contoh
ini nama user adalah root.
- Pwd berisi password dari user untuk mengakses database server, pada
contoh ini password adalah kosong.
Sedangkan output_folder adalah nama folder untuk menyimpan file-file class
DbContecx dan Model. Nama class DbContext adalah northwind2Context.cs
dengan sebagian isi dapat dilihat pada Kode 11.

Kode 11. MySQL - northwind2Context.cs.


using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

46 │ M Reza Faisal & Erick Kurniawan


#nullable disable

namespace DataAccess.MySQL
{
public partial class northwindContext : DbContext
{
public northwindContext()
{
}

public northwindContext(DbContextOptions<northwindContext>
options)
: base(options)
{
}

public virtual DbSet<AlphabeticalListOfProduct>


AlphabeticalListOfProducts { get; set; }
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<CategorySalesFor1997>
CategorySalesFor1997s { get; set; }
public virtual DbSet<CurrentProductList> CurrentProductLists
{ get; set; }
public virtual DbSet<Customer> Customers { get; set; }
public virtual DbSet<CustomerAndSuppliersByCity>
CustomerAndSuppliersByCities { get; set; }
public virtual DbSet<Customercustomerdemo>
Customercustomerdemos { get; set; }
public virtual DbSet<Customerdemographic>
Customerdemographics { get; set; }
public virtual DbSet<Employee> Employees { get; set; }
public virtual DbSet<Employeeterritory> Employeeterritories
{ get; set; }
public virtual DbSet<Invoice> Invoices { get; set; }
public virtual DbSet<Order> Orders { get; set; }
public virtual DbSet<OrderDetail> OrderDetails { get; set; }
public virtual DbSet<OrderDetailsExtended>
OrderDetailsExtendeds { get; set; }
public virtual DbSet<OrderSubtotal> OrderSubtotals { get;
set; }
public virtual DbSet<OrdersQry> OrdersQries { get; set; }
public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<ProductSalesFor1997>
ProductSalesFor1997s { get; set; }
public virtual DbSet<ProductsAboveAveragePrice>
ProductsAboveAveragePrices { get; set; }
public virtual DbSet<ProductsByCategory>
ProductsByCategories { get; set; }
public virtual DbSet<QuarterlyOrder> QuarterlyOrders { get;
set; }
public virtual DbSet<Region> Regions { get; set; }

Belajar C#: Panduan Lengkap LINQ│ 47


public virtual DbSet<SalesByCategory> SalesByCategories {
get; set; }
public virtual DbSet<SalesTotalsByAmount>
SalesTotalsByAmounts { get; set; }
public virtual DbSet<Shipper> Shippers { get; set; }
public virtual DbSet<SummaryOfSalesByQuarter>
SummaryOfSalesByQuarters { get; set; }
public virtual DbSet<SummaryOfSalesByYear>
SummaryOfSalesByYears { get; set; }
public virtual DbSet<Supplier> Suppliers { get; set; }
public virtual DbSet<Territory> Territories { get; set; }

protected override void


OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
...
optionsBuilder.UseMySQL("Server=localhost;Database=n
orthwind;Uid=root;Pwd=;");
}
}
...

Selain itu pada folder MySQL dapat dilihat file-file class Model seperti
Customer.cs atau Employee.cs. Pada Kode 12 adalah isi dari file class
Customer.cs.

Kode 12. MySQL – Customer.cs


using System;
using System.Collections.Generic;

#nullable disable

namespace DataAccess.MySQL
{
public partial class Customer
{
public Customer()
{
Customercustomerdemos = new
HashSet<Customercustomerdemo>();
Orders = new HashSet<Order>();
}

public string CustomerId { get; set; }


public string CompanyName { get; set; }
public string ContactName { get; set; }
public string ContactTitle { get; set; }
public string Address { get; set; }

48 │ M Reza Faisal & Erick Kurniawan


public string City { get; set; }
public string Region { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }

public virtual ICollection<Customercustomerdemo>


Customercustomerdemos { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
}

Pada kode tersebut dapat dilihat property-property seperti CustomerId,


CompanyName dan seterusnya yang merupakan representasi dari atribut-atribut
pada tabel customer. Sedangkan relasi tabel customer dengan tabel orders
dapat dilihat pada navigation property seperti pada baris yang dicetak tebal.

Pada sub bab digunakan EF Core 5, hal ini dikarenakan EF Core 6 masih ada
kendala penggunaan saat membuat class DbContext dan Model saat buku ini
ditulis.

SQL Server
Selanjutnya membuat class DbContext dan Model berdasarkan database SQL
Server. Langkah pertama adalah menginstall package
Microsoft.EntityFrameworkCore.SqlServer versi 5 dengan perintah
berikut ini
dotnet add package Microsoft.EntityFrameworkCore.SqlServer --
version 5.0.15

Karena package Microsoft.EntityFrameworkCore.Tools telah diinstall pada


sub bab sebelumnya pada project DataAccess maka langkah tersebut tidak
perlu dilakukan. Namun jika dibuat project baru maka package tersebut perlu
diinstall begitu juga tool dotnet -ef.

Selanjutnya membuat class DbContext dan Model dengan perintah berikut ini.
dotnet ef dbcontext scaffold "data source=.\SQLEXPRESS;
initial catalog=northwind;persist security info=True;
Integrated Security=SSPI;"
Microsoft.EntityFrameworkCore.SqlServer -o SQLServer -f

Pada perintah itu dapat dilihat connection string yang digunakan adalah
sebagai berikut.

Belajar C#: Panduan Lengkap LINQ│ 49


data source=.\SQLEXPRESS; initial catalog=northwind;persist
security info=True; Integrated Security=SSPI;

Cara ini digunakan untuk melakukan koneksi ke database SQL Server dengan
Windows Authentication. Jika melakukan koneksi dengan cara user dan login
maka perlu ada penyesuaian pada connection string.

Hasil dari pembuatan class otomatis ini dapat dilihat pada folder SQLServer.
Berikut adalah sebagaian isi dari class DbContext dengan nama
northwindContext.cs seperti yang dapat dilihat pada Kode 13.

Kode 13. SQL Server - northwindContext.cs.


using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

#nullable disable

namespace DataAccess.SQLServer
{
public partial class northwindContext : DbContext
{
public northwindContext()
{
}

public northwindContext(DbContextOptions<northwindContext>
options)
: base(options)
{
}

public virtual DbSet<AlphabeticalListOfProduct>


AlphabeticalListOfProducts { get; set; }
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<CategorySalesFor1997>
CategorySalesFor1997s { get; set; }
public virtual DbSet<CurrentProductList> CurrentProductLists
{ get; set; }
public virtual DbSet<Customer> Customers { get; set; }
public virtual DbSet<CustomerAndSuppliersByCity>
CustomerAndSuppliersByCities { get; set; }
public virtual DbSet<CustomerCustomerDemo>
CustomerCustomerDemos { get; set; }
public virtual DbSet<CustomerDemographic>
CustomerDemographics { get; set; }
public virtual DbSet<Employee> Employees { get; set; }
public virtual DbSet<EmployeeTerritory> EmployeeTerritories
{ get; set; }
public virtual DbSet<Invoice> Invoices { get; set; }

50 │ M Reza Faisal & Erick Kurniawan


public virtual DbSet<Order> Orders { get; set; }
public virtual DbSet<OrderDetail> OrderDetails { get; set; }
public virtual DbSet<OrderDetailsExtended>
OrderDetailsExtendeds { get; set; }
public virtual DbSet<OrderSubtotal> OrderSubtotals { get;
set; }
public virtual DbSet<OrdersQry> OrdersQries { get; set; }
public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<ProductSalesFor1997>
ProductSalesFor1997s { get; set; }
public virtual DbSet<ProductsAboveAveragePrice>
ProductsAboveAveragePrices { get; set; }
public virtual DbSet<ProductsByCategory>
ProductsByCategories { get; set; }
public virtual DbSet<QuarterlyOrder> QuarterlyOrders { get;
set; }
public virtual DbSet<Region> Regions { get; set; }
public virtual DbSet<SalesByCategory> SalesByCategories {
get; set; }
public virtual DbSet<SalesTotalsByAmount>
SalesTotalsByAmounts { get; set; }
public virtual DbSet<Shipper> Shippers { get; set; }
public virtual DbSet<SummaryOfSalesByQuarter>
SummaryOfSalesByQuarters { get; set; }
public virtual DbSet<SummaryOfSalesByYear>
SummaryOfSalesByYears { get; set; }
public virtual DbSet<Supplier> Suppliers { get; set; }
public virtual DbSet<Territory> Territories { get; set; }

protected override void


OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
...
optionsBuilder.UseSqlServer("data
source=.\\SQLEXPRESS; initial catalog=northwind;persist security
info=True; Integrated Security=SSPI;");
}
}
...

Sedangkan untuk class model Customer.cs dapat dilihat pada Kode 14.

Kode 14. SQL Server – Customer.cs


using System;
using System.Collections.Generic;

#nullable disable

namespace DataAccess.SQLServer

Belajar C#: Panduan Lengkap LINQ│ 51


{
public partial class Customer
{
public Customer()
{
CustomerCustomerDemos = new
HashSet<CustomerCustomerDemo>();
Orders = new HashSet<Order>();
}

public string CustomerId { get; set; }


public string CompanyName { get; set; }
public string ContactName { get; set; }
public string ContactTitle { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Region { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }

public virtual ICollection<CustomerCustomerDemo>


CustomerCustomerDemos { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
}

Jika diperhatikan kedua file class di atas antara SQL Server dan MySQL tidak
terlalu banyak perbedaannya. Seperti pada sub bab sebelumnya, sub bab ini
juga menggunakan EF Core 5. Sebagai informasi untuk database SQL Server
dapat menggunakan EF Core 6 karena tidak ada kendala dalam membuat class
DbContext dan Model.

Koneksi Database
Pada sub bab ini dicontohkan kode untuk memanfaatkan class DbContext dan
Model untuk melakukan operasi database ke database MySQL dan SQL Server.
Class-class untuk MySQL disimpan pada folder MySQL, dan class-class untuk
SQL Server disimpan pada folder SQLServer pada project DataAccess seperti
yang dapat dilihat pada Gambar 45.

52 │ M Reza Faisal & Erick Kurniawan


Gambar 45. Project DataAccess.
Selanjutnya pada Kode 15 dicontohkan cara menggunakan class-class tersebut
pada Program.cs untuk mengakses database MySQL. Untuk menggunakan
class DbContext dan Model untuk aksess ke database MySQL dapat dilihat
pada baris ke-1.

Kode 15. Command Line – Koneksi ke database MySQL.


1 using DataAccess.MySQL;
2
3 var db = new northwindContext();
4 var query = from c in db.Customers select c;
5
6 foreach (var item in query)
7 {
8 Console.WriteLine(item.CompanyName);
9 }

Selanjutnya dibuat obyek dari class northwindContext yang merupakan class


DbContext seperti dapat dilihat pada baris ke-3. Selanjutnya query untuk
melakukan ke database dapat dilihat pada baris ke-4. Pada baris itu dapat
dilihat Customers yang merupakan representasi dari class model Customer.cs.

Sedangkan untuk mengakses database SQL Server dapat dilihat dengan kode
pada Kode 16.

Kode 16. Command Line – Koneksi ke database SQL Server.


1 using DataAccess.SQLServer;
2
3 var db = new northwindContext();
4 var query = from c in db.Customers select c;
5
6 foreach (var item in query)
7 {

Belajar C#: Panduan Lengkap LINQ│ 53


8 Console.WriteLine(item.CompanyName);
9 }

Karena nama database dan tabel-tabel yang ada pada kedua database sama
maka nama class DbContext dan Model juga sama, sehingga yang diganti
cukup nama namespace yang digunakan pada class-class tersebut. Sehingga
yang diganti cukup pada bagian yang ditulis di baris ke-1 saja.

Visual Studio & Package Manager Console


Pada sub bab ini dicontohkan membuat class DbContext dan Model pada
project dengan Visual Studio.

MySQL
Langkah pertama adalah menambahkan project console dengan framework
adalah .NET 6.0 pada solution BelajarLINQ. Nama project yang dibuat adalah
DataAccess.

Selanjutnya menambahkan package dengan cara klik kanan pada project


DataAccess kemudian pilih Manage NuGet Packages. Pada NuGet: DataAccess
pilih tab Browse, dan ketikkan kata kunci MySql.EntityFrameworkCore pada
kolom pencarian sehingga didapat daftar package seperti pada Gambar 46.

Gambar 46. NuGet Package - MySql.EntityFrameworkCore.

54 │ M Reza Faisal & Erick Kurniawan


Pilih MySql.EntityFrameworkCore pada daftar kemudian dapat dilihat detail
dari package tersebut pada samping kiri daftar package. Pada bagian Version
dapat dilihat daftar versi dari package yang dipilih. Pilih versi 5.0.10 untuk
implementasi EF Core versi 5 kemudian klik tombol Install. Selanjutnya ikuti
langkah-langkah installasi.

Selanjutnya install package Microsoft.EntityFrameworkCore.Tools dan


Microsoft.EntityFrameworkCore.Design versi 5.0.15. Sehingga pada project
dapat dilihat package-package tersebut pada bagian Dependencies > Packages
seperti yang dapat dilihat pada Gambar 47.

Gambar 47. Package-package yang telah diinstall.


Kemudian buat project DataAccess menjadi Startup Project dengan cara klik
kanan pada project DataAccess dan pilih Set as Startup Project. Tanda
keberhasilan proses ini adalah teks dari nama project DataAccess akan menjadi
tebal.

Gambar 48. Package Manager Console.


Langkah selanjutnya adalah membuat class DbContext dan Model dengan
menggunakan Package Manager (PM) Console. Untuk mengaktifkan PM
Console, pilih Tools > NuGet Package Manager > Package Manager Console
pada menu. Maka dapat dilihat console di area bagian bawah Visual Studio
seperti pada Gambar 48.

Belajar C#: Panduan Lengkap LINQ│ 55


Selanjutnya ketik perintah berikut ini pada PM Console untuk membuat class
DbContext dan Model dari database MySQL.
Scaffold-DbContext
"Server=localhost;Database=northwind;Uid=root;Pwd=;"
MySql.EntityFrameworkCore -Project "DataAccess" -OutputDir
"MySQL" -f

Perintah yang digunakan adalah Scaffold-DbContext diikuti dengan


connection string kemudian nama package. Selanjutnya digunakan opsi -
Project untuk menentukan di project dan opsi -OutputDir untuk menentukan
nama folder di dalam project untuk menyimpan class-class yang dibuat. Pada
contoh di atas class-class disimpan pada folder MySQL di project DataAccess.

Hasilnya dapat dilihat dibuat folder MySQL dengan isi class-class seperti pada
Gambar 49.

Gambar 49. Porject DataAccess - Folder MySQL.

SQL Server
Dengan menggunakan project DataAccess maka cukup menambahkan package
Microsoft.EntityFrameworkCore.SqlServer versi 5.0.15 seperti yang dapat
dilihat pada Gambar 50.

56 │ M Reza Faisal & Erick Kurniawan


Gambar 50. NuGet Package - Microsoft.EntityFrameworkCore.SqlServer.
Setelah proses installasi selesai dengan mengikuti langkah-langkah yang
diberikan maka jalankan perintah ini pada PM Console.
Scaffold-DbContext "data source=.\SQLEXPRESS; initial
catalog=northwind;persist security info=True; Integrated
Security=SSPI;" Microsoft.EntityFrameworkCore.SqlServer -
Project "DataAccess" -OutputDir "SQLServer" -f

Perintah ini mirip seperti perintah yang digunakan pada sub bab sebelumnya.
Perbedaannya adalah connection string yang digunakan yaitu untuk
melakukan koneksi ke database SQL Server. Kemudian perbedaan pada nama
package yang digunakan untuk melakukan koneksi ke database SQL Server
yaitu Microsoft.EntityFrameworkCore.SqlServer. Dan yang terakhir
adalah folder SQLServer pada project DataAccess untuk menyimpan class-
class.

Hasilnya dapat dilihat tambahan folder SQLServer pada Solution Explorer di


project DataAccess seperti yang dapat dilihat pada Gambar 51.

Belajar C#: Panduan Lengkap LINQ│ 57


Gambar 51. Porject DataAccess - Folder SQL Server.

Koneksi Database
Untuk menguji dari class DbContext dan Model dari databse MySQL
digunakan kode seperti berikut yang ditulis pada file Program.cs di project
DataAccess.

Kode 17. Visual Studio – Koneksi ke database MySQL.


1 using DataAccess.MySQL;
2
3 var db = new northwindContext();
4
5 var query = from s in db.Customers select s;
6
7 foreach (var item in query)
8 {
9 Console.WriteLine(item.CompanyName);
10 }

Sedangkan untuk implementasi koneksi ke database SQL Server digunakan


kode berikut.

Kode 18. Visual Studio – Koneksi ke database SQL Server.


1 using DataAccess.SQLServer;
2
3 var db = new northwindContext();
4
5 var query = from s in db.Customers select s;
6
7 foreach (var item in query)

58 │ M Reza Faisal & Erick Kurniawan


8 {
9 Console.WriteLine(item.CompanyName);
10 }

Untuk menjalankannya cukup klik kanan pada project DataAccess kemudian


pilih Debug > Start New Instance.

Kedua kode di atas sama dengan Kode 15 dan Kode 16 yang dibuat dengan
command line. Seperti yang telah disebutkan pada sub bab sebelumnya, walau
jenis database servernya berbeda (antara MySQL dan SQL Server) namun
karena nama database dan tabel sama, serta atribut tabel sama sehingga antara
kode pertama dan kedua hanya berbeda di baris pertama saja.

Kode di atas mempunyai fungsi mendapatkan (retrieve) data dari tabel


Customer. Seperti framework data access lainnya, EF Core juga dapat
digunakan untuk melakukan operasi create (insert data), update dan
menghapus (delete) data.

Untuk menambahkan data (create/insert) dapat dilakukan dengan cara berikut


ini.

Kode 19. Visual Studio – Create Data.


1 using DataAccess.SQLServer;
2
3 var db = new northwindContext();
4
5 Customer c = new Customer();
6 c.CustomerId = "LC";
7 c.CompanyName = "Learning Center";
8
9 db.Customers.Add(c);
10 db.SaveChanges();

Baris ke-3 cukup ditulis sekali saja dengan tujuan untuk membuat obyek dari
DbContext. Obyek ini memiliki method-method untuk melakukan operasi
CRUD (Create Retrieve Update Delete).

Kemudian pada baris ke-5 dapat dilihat dibuat obyek c dari class Customer
yang merupakan class Model. Seperti yang telah disebutkan sebelumnya class
ini merupakan representasi dari tabel customer. Dengan obyek c dapat
digunakan untuk mengakses property-property yang merupakan representasi
dari atribut dari tabel customer. Pada baris ke-6 dan ke-7, dilakukan pengisian
property CustomerId dan CompanyName yang memiliki makna yagn sama
dengan memberikan nilai pada atribut CustomerID dan CompanyName pada
tabel customer. Selanjutnya pada baris ke-9, obyek c akan ditambahkan ke
dalam collection atau dengan kata lain record baru yang baru ditambahkan

Belajar C#: Panduan Lengkap LINQ│ 59


disimpan ke dalam tabel. Untuk menyimpan perubahan yang telah dilakukan
maka dilakukan perintah pada baris ke-10.

Karena buku ini hanya akan membahas melakukan query dengan LINQ, maka
untuk melakukan operasi update dan menghapus data dapat dilihat pada buku
lain yang kami telah tulis yang membahas ASP.NET dan database seperti:

- Seri Belajar ASP.NET: ASP.NET Core MVC & MySQL dengan Visual
Studio Code.
- Seri Belajar ASP.NET: ASP.NET Core 2 MVC & MS SQL Server dengan
Visual Studio 2017.
- Seri Belajar ASP.NET: ASP.NET Core 2 MVC & MS SQL Server dengan
Visual Studio 2017.
Ketiga buku tersebut dapat diunduh pada Google Play Book.

60 │ M Reza Faisal & Erick Kurniawan


4
Operator Projection

Keyword select atau method Select memproyeksikan rangkaian keluaran


berdasarkan rangkaian input. Dengan ini kita dapat menentukan keluaran yang
diinginkan dimana rangkaian keluaran bisa sama dengan rangkaian input atau
berbeda.

Klausa Select
Pada bab 2 Hello World! sub bab Hello LINQ telah diberikan beberapa contoh
query dengan LINQ dimana rangkaian output sama dengan rangkaian input.
Sebagai contoh rangkaian input adalah array berisi integer, maka rangkaian
output juga adalah array berisi integer. Contoh yang lain rangkaian input
adalah collection dengan isi obyek dari class Student, maka rangkaian output
juga berisi collection dengan isi obyek yang sama.

Selain itu keyword select juga dapat memberikan output yang berbeda karena
adanya modifikasi nilai dari rangkaian input seperti pada Kode 20.

Kode 20. Klausa select.


int[] numbers = { 13, 4, 11, 3, 9, 8, 6, 7, 2, 0 };

var query1 = from n in numbers


select n + 1;

Console.WriteLine("Bilangan + 1:");
foreach (var i in query1)
{
Console.WriteLine(i);
}
Console.WriteLine("========================");

string words = "i am studying C# programming language";


var query2 = from word in words.Split(" ")
select "kata: " + word;

foreach (var word in query2)


{
Console.WriteLine(word);
}

Belajar C#: Panduan Lengkap LINQ│ 61


Pada query1 dapat dilihat isi rangkaian input dari variable number diubah
nilainya dengan ditambahkan dengan 1. Sehingga isi rangkaian outputnya
menjadi memiliki nilai sebagai berikut.
14, 5, 12, 4, 10, 9, 7, 8, 3, 1

Sedangkan pada query2, rangkaian input ditambah dengan string “kata: “


sehingga dapat dilihat keluarannya menjadi berikut.
kata: i
kata: am
kata: studying
kata: C#
kata: programming
kata: language

Keluaran lengkap dari Kode 20 dapat dilihat pada Gcambar 52.

Gcambar 52. Ouput Kode 20.


Contoh lain adalah Kode 21, dimana inputnya adalah index dan keluarannya
adalah array string berdasarkan data input tersebut.

Kode 21. String berdasarkan index.


int[] index = { 0, 1, 2, 3, 4 };
string[] strings = { "zero", "one", "two", "three", "four",
"five", "six" };

var query3 = from n in index select strings[n];

foreach (var s in query3)


{
Console.WriteLine(s);
}

62 │ M Reza Faisal & Erick Kurniawan


Variable query3 mengambil index yang merupakan array yang berisi integer
dimana setiap nilainya akan diwakili sebagai variable n. Selanjutnya rangkaian
keluaran adalah array dari variable strings yang nilai index dari array tersebut
diisi dengan n. Sehingga jika isi query3 ditulis sebagai output akan terlihat
sebagai berikut ini.
zero
one
two
three
four

Atau hasil seluruh ketiga kode di atas dapat dilihat pada Gambar 53. Sedangkan
kode lengkap dari contoh sub bab ini dapat dilihat pada source code di folder
BAB_03 > Projection_01.

Gambar 53. Output project Projection_01.

Memilih Sebuah Property


Pada Kode 8 dan Kode 9 telah dicontohkan untuk melakukan query pada input
dari collection yang berisi obyek dari class Student dan Faculty. Pada contoh
tersebut rangkaian input sama dengan rangkaian output. Seperti yang telah
disebut di atas bahwa rangkaian output dapat berbeda dengan rangkaian input.

Untuk contoh kasus ini dibuat project baru dengan nama Projection_02 yang
menggunakan template project Console. Selanjutnya tambahkan class dengan

Belajar C#: Panduan Lengkap LINQ│ 63


nama file Student.cs dengan isi yang sama seperti pada Kode 8. Kemudian
ketikkan kode berikut pada file Program.cs.

Kode 22. Program.cs – Memilih sebuah property.


using Projection_02;

static List<Student> GetStudentList()


{
List<Student> list = new List<Student>();
list.Add(new Student
{
StudentId = 1,
FacultyId = 1,
StudentName = "Budi"
});
list.Add(new Student
{
StudentId = 2,
FacultyId = 2,
StudentName = "Wati"
});
list.Add(new Student
{
StudentId = 3,
FacultyId = 1,
StudentName = "Iwan"
});

return list;
}

var query1 = from s in GetStudentList() select s.StudentId;

foreach (var s in query1)


{
Console.WriteLine(s);
}
Console.WriteLine("======================");

var query2 = from s in GetStudentList() select s.StudentName;

foreach (var s in query2)


{
Console.WriteLine(s);
}
Console.WriteLine("======================");

var query3 = from s in GetStudentList() select s.FacultyId;

foreach (var s in query3)

64 │ M Reza Faisal & Erick Kurniawan


{
Console.WriteLine(s);
}

Pada query1 dapat dilihat bagaimana cara memilih sebuah property yaitu
StudentId sebagai output. Untuk query2, outputnya adalah kumpulan nilai
dari property StudentName. Dan untuk query3, outputnya adalah kumpulan
nilai dari property FacultyId.

Anonymous Type dan Tuple


Pada contoh sebelumnya tipe data output telah dapat diketahui dan ditentukan.
Contohnya pada Kode 20, untuk query1 dapat diketahui outputnya adalah
array berisi tipe data integer dan output query2 adalah array dengan isi tipe
data string. Sedangkan pada Kode 9, pada queryStudent diketahui tipe data
outputnya adalah Student.

Keyword select juga dapat digunakan untuk mengeluarkan output dengan


property-property yang dapat kita tentukan namun kita tidak menentukan tipe
data dari property-property tersebut. Tipe data akan ditentukan dan diketahui
oleh compiler. Artinya compiler akan membuat class dengan property-property
yang sesuai. Hal ini dikenal dengan anonymous type.

Contoh sederhana implmentasi anonymous type dapat dilihat pada Kode 23.

Kode 23. Anonymous type – contoh 1.


string[] words = { "bANANa", "ManGo", "oRanGE" };

var query4 = from w in words


select new {
Upper = w.ToUpper(),
Lower = w.ToLower()
};

foreach (var ul in query4)


{
Console.WriteLine($"Uppercase: {ul.Upper}, Lowercase:
{ul.Lower}");
}

Pada query4 dapat dilihat keyword new setelah select yang kemudian diikut
dengan tanya { } yang digunakan untuk membuat obyek baru. Pada obyek
baru tersebut terdapat dua property yaitu Upper yang diisi dengan nilai obyek
w diubah menjadi huruf besar dengan method ToUpper. Property kedua adalah

Belajar C#: Panduan Lengkap LINQ│ 65


Lower yang berisi nilai obyek w yang diubah menjadi huruf kecil dengan
method ToLower.

Contoh kedua adalah Kode 24 untuk membuat query5 yang mengeluarkan


output dengan anonymous type. Pada output ditentukan dua property yaitu
Nama yang berisi nilai StudentName dari obyek s. Property kedua adalah
Fakultas yang berisi nilai FacultyId dari obyek s.

Kode 24. Anonymous type – contoh 2.


using Projection_02;

static List<Student> GetStudentList()


{
List<Student> list = new List<Student>();
list.Add(new Student
{
StudentId = 1,
FacultyId = 1,
StudentName = "Budi"
});
list.Add(new Student
{
StudentId = 2,
FacultyId = 2,
StudentName = "Wati"
});
list.Add(new Student
{
StudentId = 3,
FacultyId = 1,
StudentName = "Iwan"
});

return list;
}

var query5 = from s in GetStudentList()


select new {
Nama = s.StudentName,
Fakultas= s.FacultyId
};

foreach (var s in query5)


{
Console.WriteLine(s);
Console.WriteLine($"{s.Nama} {s.Fakultas}");
}

66 │ M Reza Faisal & Erick Kurniawan


Di sini dapat dilihat output adalah class yang tidak kita ketahui namanya, dan
class ini memiliki dua property yaitu Nama dan Fakultas. Kemudian dengan
keyword foreach ditulis nilai obyek s dari data query5 dengan dua cara. Cara
pertama dengen menggunakan kode berikut.

Console.WriteLine(s);

Cara ini langsung menulis obyek s tanpa menentukan property apa yang ingin
ditulis. Artinya seluruh property obyek s akan ditulis ke layar. Hasilnya adalah
sebagai berikut.
{ Nama = Budi, Fakultas = 1 }
{ Nama = Wati, Fakultas = 2 }
{ Nama = Iwan, Fakultas = 1 }

Sedangkan cara kedua menulis keluaran dengan menentukan nilai property-


property dari obyek s dengan cara berikut.

Console.WriteLine($"{s.Nama} {s.Fakultas}");

Hasilnya dapat dilihat sebagai berikut.


Budi 1
Wati 2
Iwan 1

Untuk membuat output sebagai tuple, digunakan cara seperti pada Kode 25.
Jika pada anonymous type yang dicontohkan pada Kode 23 digunakan
keyword new dan tanda { } untuk membuat output dengan property baru.
Sedangkan untuk membuat tupple tidak diperlukan keyword new, cukup
dengan menggunakan tanda ( ) setelah keyword select.

Kode 25. Tupple – contoh 1.


string[] words = { "bANANa", "ManGo", "oRanGE" };

var query6 = from w in words


select (
Upper: w.ToUpper(),
Lower: w.ToLower()
);

foreach (var ul in query6)


{
Console.WriteLine($"Uppercase: {ul.Upper}, Lowercase:
{ul.Lower}");
}

Belajar C#: Panduan Lengkap LINQ│ 67


Di dalam tanda ( ) dapat dilihat setelah property Upper dan Lower diikuti
tanda : sebagai pengganti =, kemudian diikut dengan nilai dari obyek w yang
telah dimodifikasi method ToUpper dan ToLower.

Contoh yang lain dapat dilihat pada Kode 26.

Kode 26. Tupple – contoh 2.


using Projection_02;

static List<Student> GetStudentList()


{
List<Student> list = new List<Student>();
list.Add(new Student
{
StudentId = 1,
FacultyId = 1,
StudentName = "Budi"
});
list.Add(new Student
{
StudentId = 2,
FacultyId = 2,
StudentName = "Wati"
});
list.Add(new Student
{
StudentId = 3,
FacultyId = 1,
StudentName = "Iwan"
});

return list;
}

var query7 = from s in GetStudentList() select (Nama:


s.StudentName, Fakultas: s.FacultyId);

foreach (var s in query7)


{
Console.WriteLine(s);
Console.WriteLine($"{s.Nama} {s.Fakultas}");
}

Kode-kode yang dicontohkan pada sub bab ini dapat dilihat source code di
bagian BAB_03 > Projection_02.

68 │ M Reza Faisal & Erick Kurniawan


Subset dari Property-Property
Pada Kode 9 dan Kode 10 telah diberikan contoh untuk menampilkan seluruh
property-property dari collection yang berisi obyek dari class Student dan
Faculty. Seperti halnya SQL yang dapat memilih atribut-atribut yang
ditampilkan, pada LINQ juga dimungkinkan untuk memilih property-property
yang ditampilkan.

using Projection_03;

static List<Student> GetStudentList()


{
List<Student> list = new List<Student>();
list.Add(new Student
{
StudentId = 1,
FacultyId = 1,
StudentName = "Budi"
});
list.Add(new Student
{
StudentId = 2,
FacultyId = 2,
StudentName = "Wati"
});
list.Add(new Student
{
StudentId = 3,
FacultyId = 1,
StudentName = "Iwan"
});

return list;
}

var query1 = from s in GetStudentList() select s;

foreach (var s in query1)


{
Console.WriteLine($"{s.StudentId} {s.FacultyId}
{s.StudentName}");
}
Console.WriteLine("========================");

var query2 = from s in GetStudentList()


select (s.StudentId, s.StudentName, s.FacultyId);

foreach (var s in query2)


{

Belajar C#: Panduan Lengkap LINQ│ 69


Console.WriteLine($"{s.StudentId} {s.FacultyId}
{s.StudentName}");
}
Console.WriteLine("========================");

var query3 = from s in GetStudentList()


select (
s.StudentId,
s.StudentName
);

foreach (var s in query3)


{
Console.WriteLine($"{s.StudentId} {s.StudentName}");
}
Console.WriteLine("========================");

var query4 = from s in GetStudentList()


select (
Fakultas : s.FacultyId,
s.StudentName
);

foreach (var s in query4)


{
Console.WriteLine($"{s.Fakultas} {s.StudentName}");
}
Console.WriteLine("========================");

Pada query q1 menampilkan seluruh property dari collection sebagai output.


Sedangkan pada query q2 memiliki output sama seperti query q1 namun pada
q2 semua property dari obyek s disebutkan satu per satu. Selain itu kita dapat
memilih sebagian dari property tersebut seperti yang dapat dilihat pada query
q3 dimana property yang dipilih hanya StudentId dan StudentName. Selain itu
property tersebut dapat diberi nama alias seperti yang terlihat pada query q4
dimana property FacultyId diberi nama alias sebagai Fakultas.

Contoh kode ini dapat dilihat pada BAB_03 > Projection_03.

Penggunaan select & where


Seperti halnya SQL, query LINQ juga memiliki keyword where yang berfungsi
untuk menentukan memfilter berdasarkan kondisi yang ditentukan. Contoh
sederhana dapat dilihat pada Kode 27.

70 │ M Reza Faisal & Erick Kurniawan


Kode 27. Filter bilangan lebih kecil dari 5.
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var query1 = from n in numbers


where n < 5
select n;

foreach (var num in query1)


{
Console.WriteLine(num);
}

Pada contoh kode di atas dapat dilihat keyword where digunakan setelah blok
from selesai. Artinya setelah rangkaian input dipilih dengan keyword form,
kemudian rangkaian input akan dapat difilter dengan menggunakan keyword
where diikut dengan kondisi yang diinginkan. Setelah itu baru rangkaian input
yang akan dikeluarkan sebagai rangkaian output dipilih.

Dari contoh terebut maka dapat secara umum query LINQ memiliki format
sebagai berikut.
from datum in data where condition select datum

Kondisi pada bagian condition merupakan logika yang umumnya digunakan


pada pemrograman. Contoh lain dapat dilihat pada Kode 28 dimana dilakukan
filter collection Student berdasarkan FacultyId sama dengan 1 seperti yang
terlihat pada query2.

Kode 28. Filter daftar student berdasarkan FacultyId.


static List<Student> GetStudentList()
{
List<Student> list = new List<Student>();
list.Add(new Student
{
StudentId = 1,
FacultyId = 1,
StudentName = "Budi"
});
list.Add(new Student
{
StudentId = 2,
FacultyId = 2,
StudentName = "Wati"
});
list.Add(new Student
{
StudentId = 3,
FacultyId = 1,

Belajar C#: Panduan Lengkap LINQ│ 71


StudentName = "Iwan"
});

return list;
}

var query2 = from s in GetStudentList()


where s.FacultyId == 1
select s;

foreach (var s in query2)


{
Console.WriteLine($"{s.StudentId} {s.FacultyId}
{s.StudentName}");
}

Kedua contoh kode di atas dapat dilihat pada BAB_03 > Projection_04.

Memilih Dari Beberapa Input


Pada contoh-contoh yang diberikan pada sub bab sebelumnya menggunakan
sebuah rangkaian input saja. Seperti halnya SQL, sumber data juga dapat
berasal dari beberapa tabel. LINQ juga memiliki kemampuan yang sama
dimana sumber data dapat berasal dari beberapa rangkaian input. Contoh yang
paling sederhana dapat dilihat pada Kode 29.

Kode 29. Menggabung dua input – contoh 1.


int[] numbersA = { 0, 2 };
int[] numbersB = { 1, 3 };

var query3 = from a in numbersA


from b in numbersB
select (a, b);

foreach (var pair in query3)


{
Console.WriteLine($"{pair.a} - {pair.b}");
}
Pada kode di atas dapat dilihat input disimpan pada variable numberA dan
numberB. Pada kode di atas dapat dilihat digunakan dua keyword from
kemudian untuk keyword select dengan memilih obyek a dan b sebagai
keluaran. Output yang diberikan oleh query3 adalah kombinasi setiap nilai
pada obyek a dengan obyek b. Sehingga output dari kode di atas adalah sebagai
berikut.

72 │ M Reza Faisal & Erick Kurniawan


0 - 1
0 - 3
2 - 1
2 - 3

Contoh yang lain adalah dengan tambahan keyword where untuk melakukan
memberikan kondisi pada penggabungan rangkaian input seperti yang dapat
dilihat pada Kode 30.

Kode 30. Menggabung dua input – contoh 2.


int[] numbers_a = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbers_b = { 1, 3, 5, 7, 8 };

var query4 = from a in numbers_a


from b in numbers_b
where a < b
select (a, b);

foreach (var pair in query4)


{
Console.WriteLine($"{pair.a} < {pair.b}");
}

Kode di atas juga melakukan kombinasi nilai dari masing-masing obyek a


dengan masing-masing obyek b dengan kondisi hanya jika nilai dari obyek a
lebih kecil daripada nilai obyek b. Sehingga output dari kode di atas adalah
sebagai berikut.
0 < 1
0 < 3
0 < 5
0 < 7
0 < 8
2 < 3
2 < 5
2 < 7
2 < 8
4 < 5
4 < 7
4 < 8
5 < 7
5 < 8
6 < 7
6 < 8

Belajar C#: Panduan Lengkap LINQ│ 73


74 │ M Reza Faisal & Erick Kurniawan
5
Operator Ordering

Operator ordering digunakan untuk mengurutkan rangkaian keluaran. Untuk


rangkaian input dari collection yang berisi obyek maka property dari obyek
tersebut dapat digunakan sebagai parameter untuk melakukan pengurutan.
Keyword yang digunakan untuk melakukan pengurutan pada LINQ adalah
orderby.

Mengurutkan Elemen
Pada Kode 31 adalah contoh sederhana untuk mengurutkan kumpulan kata
dan angka yang disimpan pada array. Penggunaan keyword orderby dapat
dilihat pada query1 dan query2. Keyword orderby diletakkan setelah keyword
from dan sebelum keyword select.

Kode 31. Mengurutkan kata dan angka.


string[] words = { "cherry", "apple", "blueberry" };

var query1 = from word in words


orderby word
select word;

foreach (var w in query1)


{
Console.WriteLine(w);
}
Console.WriteLine("=========================");

int[] numbers = { 5, 3, 1, 11, 7, 4};

var query2 = from number in numbers


orderby number
select number;

foreach (var n in query2)


{
Console.WriteLine(n);
}

Belajar C#: Panduan Lengkap LINQ│ 75


Rangkatai input words dan numbers merupakan kata dan angka yang tidak
terurut. Setelah diurut dengan keyword orderby maka rangkaian output dapat
dilihat sebagai berikut.
apple
blueberry
cherry
=========================
1
3
4
5
7
11

Contoh kode ini dapat dilihat pada project Ordering_01.

Menurutkan Berdasarkan Property


Pengurutan juga dapat dilakukan berdasarkan property, misal untuk array
yang berisi obyek tipe string maka memiliki property Length yang menyatakan
panjang karakter yang dimiliki oleh obyek tersebut.

Kode 32. Mengurutkan array string berdasarkan property.


string[] words = { "cherry", "apple", "blueberry" };

var query3 = from word in words


orderby word.Length
select word;

foreach (var w in query3)


{
Console.WriteLine(w);
}

Pada Kode 32 dapat dilihat query3 dimana setelah keyword orderby ditulis
property word.Length dari obyek data yang akan digunakan untuk melakukan
pengurutan. Hasil dari query ini dapat dilihat pada keluaran di bawah ini.
apple
cherry
blueberry

Kode 32 dapat dilihat pada project Ordering_01.

Contoh selanjutnya adalah untuk melakukan pengurutan data dari database


dengan memanfaatkan EF Core. Karena pada bab 3. Entity Framework Core

76 │ M Reza Faisal & Erick Kurniawan


telah dibuat class DbContext dan Model pada project DataAccess maka pada
sub bab ini akan dicontohkan bagaimana memanfaatkan class-class tersebut
dari project lain.

Gambar 54. Window Reference Manager.


Berikut langkah-langkah untuk melakukan hal tersebut. Langkah pertama
adalah membuat project dengan nama Ordering_02. Kemudian klik kanan pada
project tersebut kemudian pilih Add > Project Reference sehingga ditampilkan
windows seperti pada Gambar 54. Kemudian centang pada checkbox di project
DataAccess. Kemudian klik tombol OK.

Gambar 55. Project Ordering_02.


Hasilnya dapat dilihat pada Solution Explorer di bagian project Ordering_02
seperti pada Gambar 55. Pada bagian Dependencies > Projects dapat dilihat ada

Belajar C#: Panduan Lengkap LINQ│ 77


sudah ada keterkaitan dengan project DataAccess. Selanjutnya ketik Kode 33
pada file Program.cs di project Ordering_02.

Kode 33. Ordering_02 – Program.cs


using DataAccess.MySQL;

var db = new northwindContext();


var query1 = from c in db.Customers
orderby c.CustomerId
select c;

foreach (var item in query1)


{
Console.WriteLine($"{item.CustomerId} {item.CompanyName}");
}

Kode ini akan melakukan koneksi ke database MySQL sehingga dapat dilihat
pada baris pertama penggunaan class-class dari namespace DataAccess.MySQL
dimana berisi class DbContext dan Model untuk operasi ke database MySQL.

Selanjutnya pada query1 dapat dilihat property c.CustomerId digunakan


sebagai parameter untuk pengurutan rangkaian output. Hasil dari pengurutan
data tabel customer berdasarkan atribut CustomerId dapat dilihat di bawah ini.
ALFKI Alfreds Futterkiste
ANATR Ana Trujillo Emparedados y helados
ANTON Antonio Moreno Taquera
AROUT Around the Horn
BERGS Berglunds snabbkp
BLAUS Blauer See Delikatessen
BLONP Blondesddsl pre et fils
BOLID Blido Comidas preparadas
...

Mengurutkan Menurun
Pada contoh di sub bab sebelumnya pengurutan dilakukan secara menaik dari
nilai terendah ke nilai tertinggi. Untuk melakukan pengurutan secara menurun
maka digunakan kata kunci decending setelah obyek atau property yang
digunakan sebagai parameter pengurutan.

Kode 34. Pengurutan menurun berdasarkan property.


using DataAccess.MySQL;

var db = new northwindContext();

78 │ M Reza Faisal & Erick Kurniawan


var query2 = from c in db.Customers
orderby c.CustomerId descending
select c;

foreach (var item in query2)


{
Console.WriteLine($"{item.CustomerId} {item.CompanyName}");
}

Pada Kode 34 adalah contoh pengurutan menurun berdasarkan property. Hasil


dari pengurutan ini dapat dilihat di bawah ini. Dapat dilihat perbedaan
hasilnya dibandingkan hasil sebelumnya.
...
BOLID Blido Comidas preparadas
BLONP Blondesddsl pre et fils
BLAUS Blauer See Delikatessen
BERGS Berglunds snabbkp
AROUT Around the Horn
ANTON Antonio Moreno Taquera
ANATR Ana Trujillo Emparedados y helados
ALFKI Alfreds Futterkiste

Contoh yang lain adalah contoh pengurutan menurut dengan menggunakan


data array yang berisi string seperti yang dapat dilihat pada Kode 35.

Kode 35. Pengurutan menurun data array string.


string[] words = { "cherry", "apple", "blueberry" };

var query4 = from word in words


orderby word descending
select word;

foreach (var w in query4)


{
Console.WriteLine(w);
}

Hasil dari pengurutan ini dapat dilihat sebagai berikut ini.


cherry
blueberry
apple

Belajar C#: Panduan Lengkap LINQ│ 79


6
Operator Grouping

Rangkaian input dapat dikelompokkan menjadi group dengan menggunakan


keyword group, by, dan into.

Mengelompokkan Ke Keranjang
Berikut ini contoh pengelompokan data sederhana berdasarkan suatu operasi
terhadap data. Pada Kode 36, data atau rangkaian input adalah array yang
berisi integer dari obyek numbers.

Kode 36. Grouping – Contoh 1.


int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2 };

var query1 = from n in numbers


group n by n % 2 into g
select g;

foreach (var group in query1)


{
if (group.Key.Equals(0))
{
Console.WriteLine("Bilangan Genap:");
} else
{
Console.WriteLine("Bilangan Ganjil");
}

foreach (var number in group)


{
Console.WriteLine(number);
}
}

Kemudian pada query1 dapat dilihat data dari obyek numbers disimpan ke
obyek n. Selanjutnya obyek n akan dikelompokkan (group n) berdasarkan
operasi modulus (by n % 2) yang hasilnya disimpan ke dalam obyek g (into
g). Selanjutnya rangkaian output adalah hasil pengelompokan ( select g) yang
disimpan ke obyek query1.

80 │ M Reza Faisal & Erick Kurniawan


Selanjutnya untuk menulis rangkaian output berdasarkan group dari query1.
Sebagai informasi obyek ini memiliki property Key yang merupakan identitas
dari group. Karena hasil modulus dengan 2 hanya terdiri atas 2 nilai yaitu 0 dan
1 maka group juga adalah 2. Dengan memanfaatkan property Key maka output
dapat ditulis berdasarkan group tersebut.

Contoh yang lain dapat dilihat pada Kode 37. Pada contoh ini saat membuat
rangkaian output dengan keyword select dilakukan penentukan nama
property output yaitu FirstLetter dan Words.

Kode 37. Grouping – Contoh 2.


string[] words = { "blueberry", "chimpanzee", "abacus",
"banana", "apple", "cheese" };

var query2 = from w in words


group w by w[0] into g
select (FirstLetter: g.Key, Words: g);

foreach (var g in query2)


{
Console.WriteLine("Kelompok '{0}':", g.FirstLetter);
foreach (var w in g.Words)
{
Console.WriteLine(w);
}
}

Mengelompokkan Berdasarkan Property


Contoh selanjutnya adalah mengelompokkan data berdasarkan propertynya
dapat dilihat pada Kode 38. Sebelum menjalankan kode ini jangan lupa untuk
menambahkan class Student.cs dengan namespace Grouping_02.

Kode 38. Grouping – Contoh 3.


using Grouping_02;

static List<Student> GetStudentList()


{
List<Student> list = new List<Student>();
list.Add(new Student
{
StudentId = 1,
FacultyId = 1,
StudentName = "Budi"
});

Belajar C#: Panduan Lengkap LINQ│ 81


list.Add(new Student
{
StudentId = 2,
FacultyId = 2,
StudentName = "Wati"
});
list.Add(new Student
{
StudentId = 3,
FacultyId = 1,
StudentName = "Iwan"
});

return list;
}

var query1 = from s in GetStudentList()


group s by s.FacultyId into g
select g;

foreach (var g in query1)


{
Console.WriteLine($"Fakultas: {g.Key}");
foreach (var s in g)
{
Console.WriteLine($"{s.StudentId} {s.StudentName}");
}
}

Pada query1 dapat dilihat query LINQ melakukan pengelompokkan data


berdasarka property FacultyId.

82 │ M Reza Faisal & Erick Kurniawan


7
Operator Partition

Belajar C#: Panduan Lengkap LINQ│ 83


8
Operator Set

84 │ M Reza Faisal & Erick Kurniawan


9
Operator Conversion

Belajar C#: Panduan Lengkap LINQ│ 85


10
Operator Element

86 │ M Reza Faisal & Erick Kurniawan


11
Operator Aggregator

Belajar C#: Panduan Lengkap LINQ│ 87


12
Operasi Sequence

88 │ M Reza Faisal & Erick Kurniawan


13
Operasi Join

Belajar C#: Panduan Lengkap LINQ│ 89


14
Tambahan

Generate Sequences

Quntifiying Members

Eager and Lazy Query Execution

90 │ M Reza Faisal & Erick Kurniawan


Tentang Penulis

M Reza Faisal, lahir di Banjarmasin, 20 Desember 1976.


Lulus SMA tahun 1995 kemudia melanjutkan kuliah di
Informatika Universitas Pasundan (Unpas) dan Fisika
Institut Teknologi Bandung (ITB). Sejak kuliah telah
aktif menulis di beberapa majalah komputer terbitan
nasional seperti Mikrodata, CHIP, dan Infokomputer.
Setelah menamatkan kuliah kemudian bekerja sebagai
software developer di perusahaan swasta dan trainer di training center di
Bandung. Penulis juga aktif berbagi pengetahuan dalam bentuk blog atau
ebook gratis yang fokus membahas teknologi Microsoft sehingga tahun 2008
mendapat penghargaan sebagai Microsoft Most Valuable Professional (MVP)
sampai sekarang.
Kemudian pada akhir tahun 2008 kembali ke Banjarmasin dan menjadi dosen
di Program Studi Ilmu Komputer Universitas Lambung Mangkurat (ULM).
Pada tahun 2010 melanjutkan studi di jenjang S2 di Informatika ITB
konsentrasi Rekayasa Perangkat Lunak. Dan tahun 2015 melanjutkan ke
pendidikan jenjang S3 di bidang Bioinformatika di Kanazawa University,
Jepang.

Erick Kurniawan adalah memiliki pengalaman lebih


dari 12 tahun dalam bidang pengembangan perangkat
lunak, dan desain arsitektur perangkat lunak
khususnya Microsoft Platform (web, mobile, dan
cloud platform). Saat ini bekerja sebagai konsultan,
dan professional trainer.
Penulis juga memiliki beberapa sertifikasi professional
diantaranya MCPD (Microsoft Certified Solution
Developer), dan MCT (Microsoft Certified Trainer). Selain itu penulis juga
mendapatkan penghargaan international sebagai Microsoft MVP (Most
Valuable Professional)dari tahun 2009 sampai 2021 (13 tahun).

Belajar C#: Panduan Lengkap LINQ│ 91


92 │ M Reza Faisal & Erick Kurniawan

View publication stats

Anda mungkin juga menyukai