การปรับตัวให้ชำนาญใน Linq: วิธีการแปลงคำสั่ง SQL เป็นรูปแบบ Linq
เมื่อทำงานกับฐานข้อมูลใน .NET นักพัฒนามักจะพบความจำเป็นในการแปลงคำสั่ง SQL เป็นรูปแบบ Linq หนึ่งในสถานการณ์ที่พบบ่อยคือการใช้ subquery กับ IN
เพื่อกรองผลลัพธ์ตามตารางอื่น บล็อกโพสต์นี้จะนำคุณผ่านกระบวนการแปลงคำสั่ง SQL SELECT
ที่ใช้ IN
เป็นนิพจน์ Linq ที่มีความสัมพันธ์กัน เมื่อสิ้นสุดบทความนี้ คุณจะมีความรู้ที่สามารถจัดการคำสั่งเช่นนี้ในโครงการของคุณเองได้!
ทำความเข้าใจกับปัญหา
คำสั่ง SQL ที่เราต้องการแปลมีลักษณะดังนี้:
SELECT Id, Name FROM TableA WHERE TableA.Id IN (SELECT xx from TableB INNER JOIN Table C....)
ในคำพูดที่ง่ายกว่า คุณมุ่งหวังที่จะเลือก Id
และ Name
จาก TableA
โดยกรองผลลัพธ์ที่ Id
ถูกพบในชุดค่าที่ได้จากคำสั่งย่อยที่ใช้ join
การแบ่งเบาผลลัพธ์
ในการแปลงคำสั่ง SQL นี้เป็นคำสั่ง Linq ให้ทำตามขั้นตอนเหล่านี้:
- ระบุตาราง: เรากำลังจัดการกับตารางสามตาราง:
TableA
,TableB
, และTableC
- ระบุความสัมพันธ์: คำสั่งย่อยเกี่ยวข้องกับการ join ซึ่งหมายความว่าเราต้องพิจารณาว่า
TableB
และTableC
เกี่ยวข้องกันอย่างไรในการหาค่า ids ที่เฉพาะเจาะจง - การสร้างคำสั่ง Linq: ใน Linq เราสามารถใช้คำสั่งย่อยเป็นตัวกรอง
โครงสร้างคำสั่ง Linq
นี่คือคำสั่ง Linq ที่เทียบเท่ากับคำสั่ง SQL ที่ให้มา:
from a in TableA
where (from b in TableB
join c in TableC on b.id equals c.id
where ... // (เงื่อนไขการกรองเพิ่มเติมหากจำเป็น)
select b.id).Contains(a.Id)
select new { a.Id, a.Name }
การวิเคราะห์คำสั่ง Linq
- คำสั่งภายนอก:
- เราเริ่มจาก
from a in TableA
ซึ่งคล้ายกับการเลือกจากตารางหลัก
- เราเริ่มจาก
- คำสั่งภายใน:
- ส่วนใน:
from b in TableB join c in TableC on b.id equals c.id
- การ join
TableB
กับTableC
โดยอิงจาก ids ที่ตรงกัน ทำให้เราสามารถกรองผลลัพธ์ได้อย่างมีประสิทธิภาพ
- เงื่อนไขการกรอง:
- บรรทัด
where ...
ภายในคำสั่งในสามารถถูกแทนที่หรือขยายด้วยเงื่อนไขเพิ่มเติมได้ตามต้องการ
- บรรทัด
- การตรวจสอบการมีอยู่:
- ผลลัพธ์ของคำสั่งใน,
select b.id
จะถูกห่อหุ้มด้วยการเรียก.Contains(a.Id)
เพื่อให้แน่ใจว่าเรารวมเฉพาะ ids ที่พบในชุดผลลัพธ์
- ผลลัพธ์ของคำสั่งใน,
- การเลือกขั้นสุดท้าย:
- สุดท้าย
select new { a.Id, a.Name }
ช่วยให้เราสร้างผลลัพธ์สุดท้ายให้รวมเฉพาะฟิลด์ที่ต้องการ
- สุดท้าย
สรุป
การแปลงคำสั่ง SQL เป็น Linq สามารถทำให้การดำเนินงานด้านข้อมูลมีประสิทธิภาพมากขึ้นและใช้พลังของ C# ในขณะที่รักษาความชัดเจนและประสิทธิภาพ การชำนาญในกระบวนการแปลงนี้ไม่เพียงแต่ช่วยพัฒนาทักษะของคุณในฐานะนักพัฒนา แต่ยังช่วยในการเขียนโค้ดที่สะอาดและบำรุงรักษาได้ง่ายขึ้น
หากคุณมีคำถามเพิ่มเติมเกี่ยวกับการใช้ Linq ในโครงการของคุณ หรือต้องการแปลงคำสั่ง SQL เป็น Linq อื่น ๆ ยินดีให้คุณติดต่อในความคิดเห็นด้านล่าง สนุกกับการเขียนโค้ด!