การใช้ LINQ Queries บน DataTables ใน C#
การทำงานกับข้อมูลใน C# มักจะต้องการความสามารถในการเรียกข้อมูลที่มีประสิทธิภาพเพื่อให้สามารถดึงข้อมูลและจัดการกับข้อมูลได้อย่างราบรื่น หนึ่งในวิธีที่ได้รับความนิยมในการเรียกข้อมูลใน .NET คือผ่าน Language Integrated Query (LINQ) อย่างไรก็ตาม เมื่อจัดการกับวัตถุ DataTable
คุณอาจพบกับความท้าทายบางประการเมื่อพยายามดำเนินการ LINQ queries โดยตรง หากคุณรู้สึกสงสัยเกี่ยวกับเรื่องนี้ โปรดอ่านต่อไปเมื่อเราจะอธิบายวิธีการดำเนินการ LINQ queries บน DataTable อย่างมีประสิทธิภาพ
การทำความเข้าใจปัญหา
แม้ว่า LINQ จะถูกออกแบบให้ทำงานกับแหล่งข้อมูลที่หลากหลาย แต่การเรียกข้อมูลจาก DataTable ไม่ได้ง่ายอย่างที่คิด ตัวอย่างเช่น การพยายามเรียกข้อมูลที่คล้ายกับด้านล่างนี้จะทำให้เกิดข้อผิดพลาด:
var results = from myRow in myDataTable
where results.Field("RowNo") == 1
select results;
โค้ดนี้ไม่ทำงานเนื่องจาก DataRowCollection
ไม่ได้ implement IEnumerable<T>
ซึ่งเป็นสิ่งจำเป็นสำหรับ LINQ queries
วิธีแก้ไข: ใช้ AsEnumerable()
เมื่อต้องการให้ LINQ ทำงานกับ DataTable
คุณต้องใช้เมธอดขยาย AsEnumerable()
ที่มีให้กับ DataTable เมธอดนี้จะแปลงแถวของ DataTable
ให้เป็น IEnumerable<DataRow>
นี่คือวิธีที่คุณสามารถดำเนินการ LINQ query ได้อย่างสำเร็จ:
การดำเนินการ Query ทีละขั้นตอน
-
นำเข้า Namespace ที่จำเป็น ตรวจสอบให้แน่ใจว่าคุณมี namespace ที่เหมาะสม โดยการรวมการอ้างอิงไปยัง
System.Data.DataSetExtensions
ซึ่งมักจะจำเป็นต้องเข้าถึงฟังก์ชันการทำงานของ LINQ กับ DataTable -
ใช้ AsEnumerable() สำหรับ Query แทนที่จะพยายาม query คอลเล็กชัน
Rows
โดยตรง ให้เรียกAsEnumerable()
บนDataTable
ก่อน นี่คือตัวอย่างโค้ด:var results = from myRow in myDataTable.AsEnumerable() where myRow.Field<int>("RowNo") == 1 select myRow;
-
ตัวเลือกการใช้ Lambda Expression หากคุณชอบใช้ lambda expressions ก็สามารถทำได้เช่นกัน Query ที่เทียบเท่าในไวยากรณ์ lambda เป็นดังนี้:
var result = myDataTable .AsEnumerable() .Where(myRow => myRow.Field<int>("RowNo") == 1);
การแปลงกลับไปเป็น DataTable
หากคุณต้องการแปลงผลลัพธ์กลับไปเป็น DataTable
คุณสามารถใช้ส่วนขยาย CopyToDataTable()
:
DataTable filteredTable = result.CopyToDataTable();
สรุป
การดำเนินการ LINQ query
บน DataTable
ใน C# อาจดูซับซ้อนในตอนแรก แต่ด้วยวิธีการที่ถูกต้องโดยใช้เมธอด AsEnumerable()
คุณสามารถจัดการกับข้อมูลของคุณได้อย่างมีประสิทธิภาพ ไม่ว่าจะใช้ไวยากรณ์ query หรือ lambda expressions LINQ เป็นเครื่องมือที่มีศักยภาพซึ่งสามารถเสริมประสบการณ์การจัดการข้อมูลของคุณได้
โดยการเข้าใจวิธีการเหล่านี้ คุณสามารถมั่นใจในกระบวนการทำงานที่ราบรื่นเมื่อคุณจัดการกับตารางข้อมูลในแอปพลิเคชันของคุณ สำหรับการศึกษาต่อ โปรดสำรวจวิธีการและวิธีปฏิบัติของ LINQ ที่หลากหลายเพื่อใช้ศักยภาพของ C# ให้เต็มที่