List(T) คืออะไร Generic Class ของ List ใช้งานกับ Entity Framework และ LINQ to Entities |
List(T) คืออะไร Generic Class ของ List ใช้งานกับ Entity Framework และ LINQ to Entities เป็น Generic Type ของ List(T) ที่ใช้สำหรับการจัดการ Collection วัตถุมีรูปแบบเหมือนกับ Array แต่เก็บหลายมิติ ตามชนิดและ Data Type ของ Object ที่ต้องการเก็บ แต่ List เป็นมากกว่ากว่า Array คือ List สามารถ จัดการ Index และเข้าถึง Element ของ Object การเพิ่ม-ลบ สมาชิก อ้างถึง Attribute ของ Object การจัดเรียง การสร้าง Where Clause สร้าเงื่อนไข เพื่อค้นหา Object และความสามารถอื่น ๆ ที่สามารถจัดการกับ Element ภายใน Object ได้อย่างมีประสิทธิภาพ
ในการใช้งาน List(T) จะต้องทำการ Import หรือ using คลาสของ System.Collections.Generic ก่อนที่จะเรียกใช้งาน
Example 1 การสร้าง List(T) แบบง่าย ๆ เก็บค่า Object ที่ Data Type เป็นแบบ String
Code (C#)
static void Main(string[] args)
{
// Create List
var ls = new List<string>(new string[] { "String 1", "String 2", "String 3", "String 4", "String 5" });
// Loop
foreach (var item in ls)
{
Console.WriteLine(item);
}
}
Code (VB.Net)
Private Sub Main(args As String())
' Create List
Dim ls = New List(Of String)(New String() {"String 1", "String 2", "String 3", "String 4", "String 5"})
' Loop
For Each item As var In ls
Console.WriteLine(item)
Next
End Sub
Result
เขียนได้อีกวิธีคือ
Code (C#)
static void Main(string[] args)
{
// Create List
var ls = new List<string>();
// Add Item
ls.Add("String 1");
ls.Add("String 2");
ls.Add("String 3");
ls.Add("String 4");
ls.Add("String 5");
// Loop
foreach (var item in ls)
{
Console.WriteLine(item);
}
}
Code (VB.Net)
Private Sub Main(args As String())
' Create List
Dim ls = New List(Of String)()
' Add Item
ls.Add("String 1")
ls.Add("String 2")
ls.Add("String 3")
ls.Add("String 4")
ls.Add("String 5")
' Loop
For Each item In ls
Console.WriteLine(item)
Next
End Sub
Example 2 การสร้าง List(T) แบบง่าย ๆ เก็บค่า Object ที่ Data Type เป็นแบบ Integer (Number)
Code (C#)
static void Main(string[] args)
{
// Create List
var ls = new List<int>();
// Add Item
ls.Add(10);
ls.Add(20);
ls.Add(30);
ls.Add(40);
ls.Add(50);
// Loop
foreach (var item in ls)
{
Console.WriteLine(item);
}
}
Code (VB.Net)
Private Sub Main(args As String())
' Create List
Dim ls = New List(Of Integer)()
' Add Item
ls.Add(10)
ls.Add(20)
ls.Add(30)
ls.Add(40)
ls.Add(50)
' Loop
For Each item In ls
Console.WriteLine(item)
Next
End Sub
Result
Example 3 การสร้าง List() กับ Count รายการ Item และการอ้างถึง Item ด้วย Index
Code (C#)
static void Main(string[] args)
{
// Create List
var ls = new List<string>();
// Add Item
ls.Add("String 1");
ls.Add("String 2");
ls.Add("String 3");
ls.Add("String 4");
ls.Add("String 5");
// Count
Console.WriteLine(string.Format("List count = {0}", ls.Count()));
// Get by Index
Console.WriteLine(string.Format("Item index 2 = {0}", ls[2]));
}
Code (VB.Net)
Private Sub Main(args As String())
' Create List
Dim ls = New List(Of String)()
' Add Item
ls.Add("String 1")
ls.Add("String 2")
ls.Add("String 3")
ls.Add("String 4")
ls.Add("String 5")
' Count
Console.WriteLine(String.Format("List count = {0}", ls.Count()))
' Get by Index
Console.WriteLine(String.Format("Item index 2 = {0}", ls(2)))
End Sub
Result
Example 4 การสร้าง List(T) โดยสร้าง Object จาก Class และ Property
Code (C#)
public class NameInfo
{
public string NAME { get; set; }
public string GENER { get; set; }
public int AGE { get; set; }
}
static void Main(string[] args)
{
// Create List
var ls = new List<NameInfo>();
// Add Item
ls.Add(new NameInfo { NAME = "Weerachai Nukitram", GENER = "Male", AGE = 34 });
ls.Add(new NameInfo { NAME = "Wisarut Nukitram", GENER = "Male", AGE = 40 });
ls.Add(new NameInfo { NAME = "Wipa Nukitram", GENER = "Female", AGE = 18 });
// Loop
foreach (var item in ls)
{
Console.WriteLine(item.NAME + ", " + item.GENER + ", " + item.AGE);
//Console.WriteLine(string.Format("{0}, {1}, {2}", item.NAME, item.GENER, item.AGE));
}
}
Code (VB.Net)
Public Class NameInfo
Public Property NAME() As String
Get
Return m_NAME
End Get
Set
m_NAME = Value
End Set
End Property
Private m_NAME As String
Public Property GENER() As String
Get
Return m_GENER
End Get
Set
m_GENER = Value
End Set
End Property
Private m_GENER As String
Public Property AGE() As Integer
Get
Return m_AGE
End Get
Set
m_AGE = Value
End Set
End Property
Private m_AGE As Integer
End Class
Private Sub Main(args As String())
' Create List
Dim ls = New List(Of NameInfo)()
' Add Item
ls.Add(New NameInfo() With { _
.NAME = "Weerachai Nukitram", _
.GENER = "Male", _
.AGE = 34 _
})
ls.Add(New NameInfo() With { _
.NAME = "Wisarut Nukitram", _
.GENER = "Male", _
.AGE = 40 _
})
ls.Add(New NameInfo() With { _
.NAME = "Wipa Nukitram", _
.GENER = "Female", _
.AGE = 18 _
})
' Loop
For Each item In ls
'Console.WriteLine(string.Format("{0}, {1}, {2}", item.NAME, item.GENER, item.AGE));
Console.WriteLine(item.NAME + ", " + item.GENER + ", " + item.AGE)
Next
End Sub
Result
Example 5 การสร้าง List(T) และตัวอย่างการใช้ Where Clause เพื่อค้นหารายการใน List(T)
Code (C#)
static void Main(string[] args)
{
// Create List
var ls = new List<NameInfo>();
// Add Item
ls.Add(new NameInfo { NAME = "Weerachai Nukitram", GENER = "Male", AGE = 34 });
ls.Add(new NameInfo { NAME = "Wisarut Nukitram", GENER = "Male", AGE = 40 });
ls.Add(new NameInfo { NAME = "Wipa Nukitram", GENER = "Female", AGE = 18 });
// Where statement
ls = ls.Where(o => (o.AGE <= 30)).ToList();
// Loop
foreach (var item in ls)
{
Console.WriteLine(item.NAME + ", " + item.GENER + ", " + item.AGE);
//Console.WriteLine(string.Format("{0}, {1}, {2}", item.NAME, item.GENER, item.AGE));
}
}
Code (VB.Net)
Private Shared Sub Main(args As String())
' Create List
Dim ls = New List(Of NameInfo)()
' Add Item
ls.Add(New NameInfo() With { _
.NAME = "Weerachai Nukitram", _
.GENER = "Male", _
.AGE = 34 _
})
ls.Add(New NameInfo() With { _
.NAME = "Wisarut Nukitram", _
.GENER = "Male", _
.AGE = 40 _
})
ls.Add(New NameInfo() With { _
.NAME = "Wipa Nukitram", _
.GENER = "Female", _
.AGE = 18 _
})
' Where statement
ls = ls.Where(Function(o) (o.AGE <= 30)).ToList()
' Loop
For Each item In ls
'Console.WriteLine(string.Format("{0}, {1}, {2}", item.NAME, item.GENER, item.AGE));
Console.WriteLine(item.NAME + ", " + item.GENER + ", " + item.AGE)
Next
End Sub
Result
Example 6 การสร้าง List(T) และตัวอย่างการใช้ SUM ค่าใน List ด้วย Syntax ของ LINQ
Code (C#)
static void Main(string[] args)
{
// Create List
var ls = new List<NameInfo>();
// Add Item
ls.Add(new NameInfo { NAME = "Weerachai Nukitram", GENER = "Male", AGE = 34 });
ls.Add(new NameInfo { NAME = "Wisarut Nukitram", GENER = "Male", AGE = 40 });
ls.Add(new NameInfo { NAME = "Wipa Nukitram", GENER = "Female", AGE = 18 });
// Sum AGE
int sumAge = ls.Sum(o => (o.AGE));
Console.WriteLine(string.Format("Sum Age = {0}", sumAge));
Console.WriteLine("==========================");
// Sum GROUP BY GENDER
var lsSumByGender = ls.GroupBy(o => (o.GENER))
.Select(
g => new
{
Gener = g.Key,
Age = g.Sum(s => s.AGE),
}).ToList();
foreach (var item in lsSumByGender)
{
Console.WriteLine(item.Gener + " = " + item.Age);
}
}
Code (VB.Net)
Private Shared Sub Main(args As String())
' Create List
Dim ls = New List(Of NameInfo)()
' Add Item
ls.Add(New NameInfo() With { _
.NAME = "Weerachai Nukitram", _
.GENER = "Male", _
.AGE = 34 _
})
ls.Add(New NameInfo() With { _
.NAME = "Wisarut Nukitram", _
.GENER = "Male", _
.AGE = 40 _
})
ls.Add(New NameInfo() With { _
.NAME = "Wipa Nukitram", _
.GENER = "Female", _
.AGE = 18 _
})
' Sum AGE
Dim sumAge As Integer = ls.Sum(Function(o) (o.AGE))
Console.WriteLine(String.Format("Sum Age = {0}", sumAge))
Console.WriteLine("==========================")
' Sum GROUP BY GENDER
Dim lsSumByGender = ls.GroupBy(Function(o) (o.GENER)).[Select](Function(g) New With { _
.Gener = g.Key, _
.Age = g.Sum(Function(s) s.AGE) _
}).ToList()
For Each item In lsSumByGender
Console.WriteLine(item.Gener + " = " + item.Age)
Next
End Sub
Result
ในการใช้งาน Entity Framework ด้วย LINQ to Entities เราค่อนจะมีการนำ List(T) มาใช้งานในเกือบทุก ๆ ส่วน ของการเรียกใช้งาน เพราะปกติแล้วในการเขียนด้วย ADO.Net เราจะได้ค่า Result ที่เป็น DataReader , DataSet หรือ DataTable แล้วค่อยนำมันไปใช้งานในส่วนของ DataSource หรือ Loop , ส่งค่าไปในส่วนอื่น ๆ แต่ใน LING to Entities จะไม่มีชุดคำสั่งเหล่านี้ ฉะนั้นค่าที่ได้จาก LINQ to Entities จะนิยมแปลงไปเป็น List(T) แทน เพราะใน LINQ to Entities สนับสนุนการทำงานร่วมกับ List(T) ค่อนข้างจะมีประสิทธิภาพมาก เช่น
LINQ to Entities (C#)
var ds = (from c in db.CUSTOMER select c);
LINQ to Entities (VB.Net)
Dim ds = (From c In db.CUSTOMER Select c)
จาก คำสั่งนี้จะได้ Result เป็นค่า IEnumerable() เหมือนกับ DataReader ของ System.Data ใน ADO.Net โดยค่านี้ยังมีการ iterate กับ data ด้วย momory ที่ถูกจองไว้ จะไม่ค่อยนิยมนำไปใช้งานต่อ แต่ในกรณีที่นำไปใช้ในส่วนอื่น ๆ ของโปรแกรม จะนิยมทำการแปลง
IEnumerable.ToList() ให้เป็น List(T)
LINQ to Entities (C#)
var ds = (from c in db.CUSTOMER select c).ToList();
LINQ to Entities (VB.Net)
Dim ds = (From c In db.CUSTOMER Select c).ToList()
ซึ่งคำสั่งนี้จะมีได้ IEnumerable.ToList() เหมือนกับ DataTable ของ System.Data ใน ADO.Net ซึ่งมีการใช้ .ToList() จะมีการแปลงให้เป็น Object List (T) อัตโนมัติ ประกอบด้วย List(CUSTOMER) เช่น
LINQ to Entities (C#)
public class CUSTOMER
{
public string CUSTOMER_ID { get; set; }
public string NAME { get; set; }
public string EMAIL { get; set; }
public string COUNTRY_CODE { get; set; }
public decimal BUDGET { get; set; }
public decimal USED { get; set; }
}
List<CUSTOMER> ds = new List<CUSTOMER>();
LINQ to Entities (VB.Net)
Public Class CUSTOMER
Public Property CUSTOMER_ID() As String
Get
Return m_CUSTOMER_ID
End Get
Set
m_CUSTOMER_ID = Value
End Set
End Property
Private m_CUSTOMER_ID As String
Public Property NAME() As String
Get
Return m_NAME
End Get
Set
m_NAME = Value
End Set
End Property
Private m_NAME As String
Public Property EMAIL() As String
Get
Return m_EMAIL
End Get
Set
m_EMAIL = Value
End Set
End Property
Private m_EMAIL As String
Public Property COUNTRY_CODE() As String
Get
Return m_COUNTRY_CODE
End Get
Set
m_COUNTRY_CODE = Value
End Set
End Property
Private m_COUNTRY_CODE As String
Public Property BUDGET() As Decimal
Get
Return m_BUDGET
End Get
Set
m_BUDGET = Value
End Set
End Property
Private m_BUDGET As Decimal
Public Property USED() As Decimal
Get
Return m_USED
End Get
Set
m_USED = Value
End Set
End Property
Private m_USED As Decimal
End Class
Dim ds As New List(Of CUSTOMER)()
ซึ่ง Object ต่าง ๆ เหล่านี้ จะมีการแปลงมาให้อัตโนมัติ หลังจากที่ใช้ IEnumerable.ToList()
ส่วนในเรื่องของ Performance ของ List(T) หลายคนอาจจะกังวลว่า ในกรณีที่มีการ Query ข้อมูลเป็นจำนวนมากแล้วจับลง List(T) จะมีปัญหาในเรื่องการทำงานช้าหรือใช้ Memory จำนวนมากหรือไม่ ในความคิดเห็นส่วนตัวและอ่านจากหลาย ๆ ความคิดเห็นของกูรูทั้งหลาย การใช้งาน List(T) จะมีผลเรื่อง Performance และ Memory จริง แต่มันเป็นกระบวนการที่น้อยมาก เมื่อเปรียบเทียบกับผลัพธ์ ของกระบวนการนำไปใช้งานจริง ซึ่งสามารถใช้งานได้ไม่มีปัญหา เมื่อข้อมูลมีปริมาณมากแน่นอน
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2015-09-30 09:11:03 /
2017-03-24 22:56:08 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|