C# C-Sharp คือ ตอนที่ 11 : LINQ (Language Integrated Query)

  1. LINQ: พื้นฐาน (Basics)
  2. LINQ และการทำแอพ
  3. ไวยากรณ์ของแบบสอบถาม (Query Syntax) vs ไวยากรณ์ของเมธอด (Method Syntax)
  4. ผลกระทบ (Impact) ของ LINQ ต่อประสิทธิภาพ (Performance)
  5. LINQ ในการพัฒนาแอพในโลกแห่งความเป็นจริง

Language Integrated Query หรือ LINQ เป็นหนึ่งในฟีเจอร์ที่ทรงพลังในการทำแอพที่สุดใน C# เป็นชุดของเทคโนโลยีที่รวมอยู่ใน .NET Framework ที่ขยายความสามารถในการสืบค้นอันทรงพลังไปยังไวยากรณ์ภาษาของ C# เมื่อใช้อย่างถูกต้อง LINQ จะเพิ่มประสิทธิภาพการทำงานได้อย่างมากโดยช่วยให้นักพัฒนาสามารถโต้ตอบกับข้อมูลด้วยวิธีที่เป็นธรรมชาติและปลอดภัยยิ่งขึ้น สิ่งนี้มีความสำคัญอย่างยิ่งเมื่อทำแอพที่ซับซ้อนซึ่งการจัดการข้อมูลเป็นข้อกังวลหลัก

1. LINQ: พื้นฐาน (Basics)

ที่แกนหลัก LINQ จัดเตรียมไวยากรณ์ที่เหมือน SQL เหมือนกันเพื่อสืบค้นและจัดการข้อมูลโดยไม่คำนึงถึงแหล่งที่มา รวมถึงฐานข้อมูล เอกสาร XML คอลเล็กชันในหน่วยความจำ เช่น อาร์เรย์และรายการ และแม้แต่แหล่งข้อมูลระยะไกล นี่เป็นการออกจากวิธีการแบบเดิมที่ต้องเรียนรู้ภาษาการสืบค้นที่แตกต่างกันสำหรับแหล่งข้อมูลต่างๆ

เป้าหมายหลักของ LINQ คือการรวมการสืบค้นข้อมูลเข้ากับ C# เป็นโครงสร้างภาษาชั้นหนึ่ง สิ่งนี้หมายความว่าอะไร พูดง่ายๆ ก็คือ การสืบค้นข้อมูลจะกลายเป็นเรื่องธรรมชาติเหมือนกับการเรียกใช้เมธอดหรือการสร้างออบเจกต์ โดยได้รับประโยชน์เต็มที่จากฟีเจอร์ต่างๆ ของภาษา C# เช่น การตรวจสอบประเภท การสนับสนุน IntelliSense ใน Visual Studio และอื่นๆ

List<int> numbers = new List<int> { 0, 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);

ในตัวอย่างนี้ เราใช้วิธี Where ของ LINQ เพื่อกรองเลขคู่ออกจากรายการ ตัวแปร ผลลัพธ์ evenNumbers จะเป็นชุดของเลขคู่ในรายการเริ่มต้น

2. LINQ และการทำแอพ

เมื่อพูดถึงการทำแอพ LINQ เป็นเครื่องมือที่ขาดไม่ได้ในคลังแสงของนักพัฒนา C# ไม่ว่าคุณจะทำงานบนคอนโซลแอปพลิเคชัน แอป Windows Forms หรือ WPF แอปมือถือ Xamarin หรือเว็บแอปพลิเคชัน ASP.NET การจัดการข้อมูลจะเป็นส่วนสำคัญของฟังก์ชันการทำงาน LINQ ช่วยให้การทำแอพเหล่านี้ง่ายขึ้นและนำไปสู่โค้ดที่สะอาดและบำรุงรักษาได้มากขึ้น

พิจารณาสถานการณ์ในการพัฒนาแอพมือถือโดยใช้ Xamarin ซึ่งคุณต้องกรองรายชื่อผู้ใช้ตามอายุของพวกเขา หากไม่มี LINQ คุณอาจต้องเขียน for-each เพื่อวนซ้ำรายการ ตรวจสอบอายุของผู้ใช้แต่ละคน และเพิ่มผู้ใช้ที่ตรงกันลงในรายการใหม่ อย่างไรก็ตาม ด้วย LINQ คุณสามารถทำงานเดียวกันให้สำเร็จได้ในโค้ดบรรทัดเดียว

var adultUsers = users.Where(user => user.Age >= 18);

ในบรรทัดนี้ เรากำลังสอบถามรายชื่อ users และกรองผู้ใช้ที่มีอายุ 18 ปีขึ้นไปออก ฟังก์ชัน Where เป็นตัวดำเนินการ LINQ ที่มีฟังก์ชันการกรองนี้

3. ไวยากรณ์ของแบบสอบถาม (Query Syntax) vs ไวยากรณ์ของเมธอด (Method Syntax)

คุณลักษณะเฉพาะอย่างหนึ่งของ LINQ คือรองรับไวยากรณ์สองประเภทที่แตกต่างกัน ได้แก่ ไวยากรณ์ของคิวรีและไวยากรณ์ของเมธอด

ไวยากรณ์ของแบบสอบถามมีลักษณะคล้ายกับ SQL มากและมักจะอ่านได้ง่ายกว่าสำหรับแบบสอบถามที่ซับซ้อน

var adultUsers = from user in users
                 where user.Age >= 18
                 select user;

ในทางกลับกัน ไวยากรณ์ของเมธอดจะใช้การเรียกเมธอดแบบลูกโซ่และมีความยืดหยุ่นมากกว่า เนื่องจากคุณสามารถใช้เมธอด .NET ใดๆ ก็ได้นอกเหนือจากตัวดำเนินการ LINQ มาตรฐาน

var adultUsers = users.Where(user => user.Age >= 18);

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

4. ผลกระทบ (Impact) ของ LINQ ต่อประสิทธิภาพ (Performance)

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

อย่างไรก็ตาม บางครั้ง LINQ อาจทำงานช้ากว่าการวนซ้ำแบบเดิม โดยเฉพาะอย่างยิ่งกับชุดข้อมูลขนาดใหญ่ เนื่องจากค่าใช้จ่ายในการตั้งค่าการสืบค้น LINQ และการดำเนินการ เช่นเดียวกับเครื่องมืออื่นๆ การทำความเข้าใจจุดแข็งและจุดอ่อนของเครื่องมือนั้นเป็นกุญแจสำคัญในการใช้งานอย่างมีประสิทธิภาพ

5. LINQ ในการพัฒนาแอพในโลกแห่งความเป็นจริง

พิจารณาว่าคุณกำลังพัฒนาเว็บแอปพลิเคชันโดยใช้ ASP.NET Core และ Entity Framework Core และคุณต้องการแสดงรายชื่อลูกค้าที่ซื้อเกินมูลค่าที่กำหนด ใน SQL แบบดั้งเดิม คุณจะต้องเขียนคำสั่ง JOIN เพื่อรวมข้อมูลจากตาราง Customers และ Orders จากนั้นกรองตามมูลค่าการสั่งซื้อ อย่างไรก็ตาม ด้วย LINQ สิ่งนี้จะง่ายขึ้นมาก:

var valuableCustomers = from customer in dbContext.Customers
                        join order in dbContext.Orders on customer.Id equals order.CustomerId
                        where order.Value > 500
                        select customer;

ที่นี่ เรากำลังรวม ตาราง Customers และ Orders ตาม ID ของลูกค้า จากนั้นกรองเพื่อรวมเฉพาะลูกค้าที่ทำการสั่งซื้อมากกว่า $500 ข้อความค้นหานี้สามารถเขียนได้โดยตรงในโค้ด C# ของคุณ โดยไม่จำเป็นต้องเปลี่ยนไปใช้ SQL


โดยพื้นฐานแล้ว LINQ ช่วยให้คุณสามารถเขียนโค้ดที่สื่ออารมณ์ อ่านได้ และกระชับมากขึ้นเมื่อต้องจัดการกับข้อมูล ซึ่งจะมอบประโยชน์ของการตรวจสอบเวลาคอมไพล์, IntelliSense และความสามารถในการสืบค้นอันทรงพลังในภาษา C# ในฐานะนักพัฒนา การเรียนรู้ LINQ อย่างเชี่ยวชาญจะทำให้กระบวนการทำแอพของคุณง่ายขึ้นอย่างมาก และช่วยให้คุณมีสมาธิกับการนำตรรกะทางธุรกิจของแอปไปใช้ได้มากขึ้น อย่างไรก็ตาม เช่นเดียวกับเครื่องมืออื่น ๆ การเข้าใจจุดแข็งและจุดอ่อนเป็นสิ่งสำคัญในการใช้งานอย่างมีประสิทธิภาพ ด้วยการใช้ประโยชน์จากพลังของ LINQ ในการทำแอพของคุณ คุณสามารถยกระดับการเขียนโปรแกรม C# ของคุณไปอีกขั้น


C# C-Sharp คืออะไร

C# C-Sharp คือ ตอนที่ 10 : การมอบสิทธิ์ (Delegates) และเหตุการณ์ (Events)
C# C-Sharp คือ ตอนที่ 12 : การเข้าถึงข้อมูลด้วย Entity Framework