ในหลายๆ วันที่ผ่านมาก็ได้ทดลองการเขียนโค้ดเกี่ยวกับ การดึงข้อมูลจากตัวแปร Anonymous Type ซึ่งก็ไม่ยากอย่างที่คิด แต่มันก็ต้องใช้เวลาทำความเข้าใจ ผมพูดได้เต็มปากได้เลยว่าไม่มีใครจำรูปแบบการใช้งานได้ในการเขียนโค้ดตามตัวอย่างแค่ครั้งเดียว ผมเริ่มศึกษาจากตัวอย่างง่ายๆ ที่หามาได้จากหนังสือ ซึ่งก็หลายเล่มอ่านกันจนเบื่อเลยละครับ ตัวอย่างแรกดังนี้ครับมีดังนี้ครับ
1 2 3 4 5 6 | //การใช้เงื่อนไขในการดึงข้อมูลจากตัวแปร var numbers = new int [] {0, 1, 2, 3, 4, 5, 6, 7}; var numberset = from n in numbers orderby n descending select n; foreach(var n in numberset) Console.WriteLine(n); |
ตัวอย่างแรก จะเห็นถึงรูปแบบการดึงข้อมูลมาทั้งหมด แต่มีการให้เรียงข้อมูลใหม่จากมากไปหาน้อย ตามตัวอย่างคือ descending และคำสั่งที่ให้เลือกทั้งหมดนั่นคือ
01 02 03 04 05 06 07 08 09 10 | select n in numbers //* สำหรับคำสั่งจากน้อยไปหามากให้ใช้ ascending //การใช้เงื่อนไขในการดึงข้อมูลจากตัวแปรแบบ var songs = new string[]{ "Way back into love" , "My way" }; var newsong= from song in songs select new {Title=song}; foreach(var s in newsong) Console.WriteLine(s.Title); |
ตัวอย่างที่สองก็คล้ายๆ ตัวอย่างแรกแต่เป็นแบบชนิดอักษร และจะเห็นว่า นำตัวแปรแรกมาสร้างคุณสมบัติเพิ่มขึ้นมาใหม่ ต่อไปเป็นตัวอย่างการใช้เงื่อนไขในการเลือกข้อมูล
เริ่มด้วย การสร้างคลาสตามข้างล่าง
เริ่มด้วย การสร้างคลาสตามข้างล่าง
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestLinqConsole { class Person { private int _Id; public int ID { get { return _Id; } set { _Id = value; } } private string _name; public string Name { get { return _name; } set { _name = value; } } private string _email; public string Email { get { return _email; } set { _email = value; } } } } |
ต่อมาเป็นการนำข้อมูลมาแสดงตามเงื่อนไข
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | public void ListPersonByCondition() { Console.Clear(); List people = new List { new Person{ID=1, Name= "Paul" , Email= "pkimmel@softconcepts.com" }, new Person{ID=2, Name= "Joe" , Email= "jswan@gmail.com" } }; var names = from p in people where p.ID == 1 orderby p.Name select new { FirstName = p.Name, p.Email }; foreach (var name in names) Console.WriteLine(name.FirstName + " ," + name.Email); Console.WriteLine( "Press any key to back to menu..." ); Console.ReadLine(); } |
ตามรูปแบบให้เราใส่เงื่อนไข ตามหลังสเตทเมนต์ แวร์ และก่อน ซีเลค ตามตัวอย่าง โอเปอเรเตอร์ที่ใช้ก็เหมือนการเขียนโค้ดทั่วไปได้แก่ ==, !=, >, <, &&, || เหมือนกับโอเปอเรเตอร์ในภาษา c#
ตัวอย่างการใช้โอเปอเรเตอร์อื่นได้แก่
ตัวอย่างการใช้โอเปอเรเตอร์อื่นได้แก่
1 | where p.Name== "Paul" , where p.Name.StartsWith( "P" ), where p.ID != 1 && |
อีกตัวอย่างหนึ่งที่น่าสนใจ ตามตัวอย่างนี้
1 2 3 4 5 | var contacts = from customer in db.Customers where customer.Name.StartsWith( "A" ) && customer.Orders.Count > 0 orderby customer.Name select new { customer.Name, customer.Phone }; |
*จะเห็นว่ามี การกระทำที่มากกว่าการเปรียบเทียบระหว่างฟิลด์ข้อมูลสองฟิลด์ แต่เป็นรูปแบบในการกรองข้อมูลจากฟิลด์เดียว ตามตัวอย่างด้านบน เช่น StartsWith(“A”) , customer.Orders.Count
ตัวอย่างอื่นๆ ในการใช้งานจากหนังสือ Manning Linq in action
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | string[] words = { "hello" , "wonderful" , "linq" , "beautiful" , "world" }; var shortWords = from word in words where word.Length <= 5 select word; foreach (var word in shortWords) Console.WriteLine(word); var groups = from word in words orderby word ascending group word by word.Length into lengthGroups orderby lengthGroups.Key descending select new {Length=lengthGroups.Key, Words=lengthGroups}; foreach (var group in groups) { Console.WriteLine( "Words of length " + group.Length); foreach (string word in group.Words) Console.WriteLine( " " + word); } |
จะเห็นรูปแบบการจัดกลุ่มข้อมูลโดยคำสั่ง group … by … into …
สรุป บทความตอนนี้ บันทึกความเข้าใจเบื้องต้นเกี่ยวกับการกรองข้อมูลมาใช้งาน โดยการใช้เงื่อนไข และรูปแบบการใช้งานตัวแปรชนิดนี้ แบบง่ายๆ
No comments:
Post a Comment