Ngôn ngữ LINQ - Toán tử Select
Toán tử Select trong LINQ
Có hai toán tử projection có sẵn trong LINQ: Select và SelectMany. Chúng được sử dụng để định dạng kết quả trả về.
Toán tử projection là một trong những toán tử truy vấn chuẩn của LINQ.
Toán tử Select trong LINQ
Toán tử Select luôn trả về một danh sách IEnumerable chứa các phần tử dựa trên hàm biến đổi. Nó tương tự như mệnh đề SELECT của SQL tạo ra tập kết quả.
Bây giờ, chúng ta sẽ tìm hiểu toán tử truy vấn Select bằng cách sử dụng lớp Student sau.
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
}
Mệnh đề Select trong Cú pháp truy vấn
Cú pháp truy vấn LINQ phải kết thúc bằng mệnh đề select hoặc groupby. Ví dụ sau đây cho thấy toán tử select trả về một danh sách kiểu chuỗi chứa StudentName.
// Student collection
IList<Student> studentList = new List<Student>()
{
new Student() { StudentID = 1, StudentName = "John" },
new Student() { StudentID = 2, StudentName = "Moin" },
new Student() { StudentID = 3, StudentName = "Bill" },
new Student() { StudentID = 4, StudentName = "Ram" },
new Student() { StudentID = 5, StudentName = "Ron" }
};
var selectResult = from s in studentList
select s.StudentName;
foreach(var name in selectResult)
{
Console.WriteLine(name);
}
Đây là kết quả khi biên dịch và thực thi chương trình:
John
Moin
Bill
Ram
Ron
Toán tử select có thể được sử dụng để định dạng kết quả theo yêu cầu của chúng ta. Nó có thể được sử dụng để trả về một tập hợp các lớp tùy chỉnh hoặc kiểu ẩn danh chứa các thuộc tính theo nhu cầu của chúng ta.
Ví dụ sau đây của mệnh đề select trả về một tập hợp kiểu ẩn danh chứa thuộc tính Name và Age.
IList<Student> studentList = new List<Student>()
{
new Student() { StudentID = 1, StudentName = "John", Age = 13 },
new Student() { StudentID = 2, StudentName = "Moin", Age = 21 },
new Student() { StudentID = 3, StudentName = "Bill", Age = 18 },
new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 },
new Student() { StudentID = 5, StudentName = "Ron" , Age = 15 }
};
// returns collection of anonymous objects with Name and Age property
var selectResult = from s in studentList
select new
{
Name = "Mr. " + s.StudentName,
Age = s.Age
};
// iterate selectResult
foreach (var item in selectResult)
{
Console.WriteLine("Student Name: {0}, Age: {1}", item.Name, item.Age);
}
Đây là kết quả khi biên dịch và thực thi chương trình:
Student Name: Mr. John, Age: 13
Student Name: Mr. Moin, Age: 21
Student Name: Mr. Bill, Age: 18
Student Name: Mr. Ram, Age: 20
Student Name: Mr. Ron, Age: 15
Phương thức Select trong Cú pháp phương thức
Phương thức mở rộng Select là tùy chọn trong cú pháp phương thức. Tuy nhiên, bạn có thể sử dụng nó để định dạng dữ liệu.
Trong ví dụ sau,phương thức mở rộng Select trả về một tập hợp các đối tượng ẩn danh với thuộc tính Name và Age:
IList<Student> studentList = new List<Student>()
{
new Student() { StudentID = 1, StudentName = "John", Age = 13 },
new Student() { StudentID = 2, StudentName = "Moin", Age = 21 },
new Student() { StudentID = 3, StudentName = "Bill", Age = 18 },
new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 },
new Student() { StudentID = 5, StudentName = "Ron" , Age = 15 }
};
// returns collection of anonymous objects with Name and Age property
var selectResult = studentList.Select(s => new
{
Name = s.StudentName,
Age = s.Age
});
// iterate selectResult
foreach (var item in selectResult)
{
Console.WriteLine("Student Name: {0}, Age: {1}", item.Name, item.Age);
}
Đây là kết quả khi biên dịch và thực thi chương trình:
Student Name: John, Age: 13
Student Name: Moin, Age: 21
Student Name: Bill, Age: 18
Student Name: Ram, Age: 20
Student Name: Ron, Age: 15
Trong ví dụ trên, tập kết quả trả về sẽ chứa các đối tượng ẩn danh với thuộc tính Name và Age như hiển thị bên dưới trong chế độ Debug.