 |
|
พยายามจะเขียนมาเรื่อยๆนะครับ อยากให้ลองเปลี่ยนมาใช้ Linq ดู หากเข้าใจการทำงานแล้วไม่ยากนะครับ ง่ายกว่าด้วยซ้ำไป ผมลองนำมาใช้ในกรพัฒนาโปรรแกมขนาดใหญ่แล้วไม่มีปัญหาอะไร และการทำงานก็คอนข้างจะเร็ว และพัฒนาง่าย ในตอนที่ 1 นี้ผมจะลองยกตัวอย่างการใช้งาน Linq กับ int ให้ดูนะครับ ผมจะ ใช้ c# และเขียนเป็น Web App เป็นหลักนะครับ ลองพิจารณาโปรรแกมแกรม C# ต่อไปนี้
Code (C#)
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = "";
int[] x = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
foreach (int i in x)
{
if (i > 10)
Label1.Text += i + "<br>";
}
}
โปรแกรมแสดงค่าใน Array ที่มีค่ามากกว่า 10
เป็น C# ธรรมดา เราสามารถเขียนใหม่ได้ดังต่อไปนี้ (ยังไม่ใช่ Linq)
Code (C#)
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = "";
var x = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
// คำสั่ง Linq
var q = from p in x
where p > 10
select p;
foreach (var i in q)
{
Label1.Text += i + "<br>";
}
}
จากตัวอย่างจะเห็นว่าเราใช้ linq ในการเข้าถึงข้อมูลแบบ Array โดยที่ใส่เงื่อนไขลักษณะคล้ายๆ SQL หลายคนอาจจะมีคำถามในใจว่าทำไม่ต้องใช้ มันยาวกว่าเดิมอย่างเห็นได้ชัด ลองติดตามตัวอย่างถัดไป อีกจุดหนึ่งที่น่าสนใจคือผมใช้ตัวแปร var ทั้งหมด ตัวแปรvar สามารถใช้ได้กับตัวแปรทุกชนิดโดยไม่ต้องระบุของ C# นะครับ ที่นี้ลองดูตัวอย่างถัดไป ผมจะเรียงข้อมูลที่ได้จากหลังมาหน้าและแสดงแค่ 3 ตัวนะครับ จากตัวอย่างได้คำตอยมา 4 ตัวคือ 11 12 13 14
Code (C#)
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = "";
var x = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
// คำสั่ง Linq
var q = from p in x
where p > 10
orderby p descending // เรียงจากมากไปน้อย
select p;
foreach (var i in q.Take(3)) // เอาแค่ 3 ตัว
{
Label1.Text += i + "<br>";
}
}
นอกจากนี้ผมยังสามารถใช้ lamda function ในการแสดงผลแทน foreach ได้อีกด้วย สำหรับรายละเอียดจะพยายามมาอธิบายต่อในชุดที่ 2 ผลลัพท์ของโปรรแกมต่อไปนี้ เหมือนโปรรแกรมที่ผ่านมานะครับ
Code (C#)
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = "";
var x = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
// คำสั่ง Linq
var q = from p in x
where p > 10
orderby p descending
select p;
Array.ForEach(q.Take(3).ToArray(), c => Label1.Text += c + "<br>"); // ส่วนนี้แก้ไขครับ
}
สำหรับตัวอย่างสุดท้ายในครั้งนี้ให้เอาไปลองดูนะครับ ผมเปลี่ยนสิ่งที่ได้จากคำสั่ง linq ให้เป็นข้อมูลแบบโครงสร้างนะครับ โดยกลายเป็น array of int 3 ชุดคือ a1, a2 และ a3
Code (C#)
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = "";
var x = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
// คำสั่ง Linq
var q = from p in x
where p > 10
orderby p descending
select new {a1 = p, a2 = p*2, a3 = p*3};
Array.ForEach(q.Take(3).ToArray(), c => Label1.Text += c.a1+" "+c.a2+" "+c.a3 + "<br>");
}
ผลลัพท์ที่ได้
14 28 42
13 26 39
12 24 36
หวังว่าคงจะเป็นประโยชน์สำหรับผู้ที่จะเรีมต้นใช้ Linq ในการพัฒนานะครับ ยังไงลง comment ให้หน่อยนะครับ จะได้รู้ว่าเข้าใจไม๊ หรือว่าต้องลงอะไรเพิ่มเติม แล้วยังไงจะรีบกลับมาเขียนต่อชุดที่ 2 นะครับ
Tag : - - - -
|
|
 |
 |
 |
 |
Date :
2009-03-20 22:03:19 |
By :
mercury_rmutt |
View :
13411 |
Reply :
7 |
|
 |
 |
 |
 |
|
|
|
 |