Ngôn ngữ LINQ - Cú pháp truy vấn LINQ

Cú pháp truy vấn LINQ

Có hai cách cơ bản để viết truy vấn LINQ cho danh sách IEnumerable hoặc nguồn dữ liệu IQueryable.

  1. Cú pháp truy vấn LINQ.
  2. Cú pháp phương thức LINQ.

Cú pháp truy vấn LINQ

Cú pháp truy vấn tương tự như truy vấn SQL (Ngôn ngữ truy vấn có cấu trúc) cho cơ sở dữ liệu. Nó có cú pháp trong mã C# hoặc VB.NET như sau:

from <range variable> in <IEnumerable<T> or IQueryable<T> Collection>

<Standard Query Operators> <lambda expression>

<select or groupBy operator> <result formation>

Cú pháp truy vấn LINQ bắt đầu bằng từ khóa from và kết thúc bằng từ khóa select. Điều này ngược với cú pháp truy vấn SQL bắt đầu bằng từ khóa select.

Lý do bắt đầu bằng từ khóa from là IntelliSense sẽ biết trước được kiểu dữ liệu để hỗ trợ bạn gõ biểu thức truy vấn nhanh chóng.

Ví dụ dưới đây minh họa một biểu thức truy vấn LINQ trả về các chuỗi có chứa từ "Tutorials":

// string collection
IList<string> stringList = new List<string>() 
{ 
    "C# Tutorials",
    "VB.NET Tutorials",
    "Learn C++",
    "MVC Tutorials" ,
    "Java" 
};

// LINQ Query Syntax
var result = from s in stringList
             where s.Contains("Tutorials") 
             select s;

foreach(var item in result)
{
    Console.WriteLine(item);
}

Đây là kết quả khi biên dịch và thực thi chương trình trên:

C# Tutorials
VB.NET Tutorials
MVC Tutorials

Xem ví dụ

Hình dưới đây cho thấy cấu trúc của cú pháp truy vấn LINQ.

Cú pháp biểu thức truy vấn LINQ

Cú pháp truy vấn bắt đầu bằng mệnh đề from theo sau là biến range. Từ khóa from có cấu trúc from s in strList có nghĩa là từ mỗi phần tử trong danh sách. Nó tương tự như một vòng lặp foreach:

foreach(var s in strList)
{
    // some code
}

Sau mệnh đề from, bạn có thể sử dụng các toán tử truy vấn tiêu chuẩn khác nhau để lọc, gom nhóm, nối các phần tử của danh sách. Có khoảng 50 toán tử truy vấn tiêu chuẩn có sẵn trong LINQ.

Trong ví dụ trên, chúng ta đã sử dụng toán tử where (còn được gọi là mệnh đề where) theo sau là một điều kiện. Điều kiện này thường được thể hiện bằng cách sử dụng biểu thức lambda.

Cú pháp truy vấn LINQ luôn kết thúc bằng mệnh đề select hoặc group by. Mệnh đề select được sử dụng để định hình dữ liệu. Bạn có thể chọn toàn bộ đối tượng hoặc chỉ một số thuộc tính của nó để trả về. Trong ví dụ đơn giản ở trên, do chỉ là danh sách chuỗi nền chúng tôi đã chọn những chuỗi thỏa điều kiện để trả về kết quả.

Trong ví dụ dưới đây, chúng tôi sử dụng cú pháp truy vấn LINQ để tìm ra các sinh viên có độ tuổi từ 13 đến 19 từ danh sách sinh viên.

// Student collection
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 } 
};

// LINQ Query Syntax to find out teenager students
var result = (from s in studentList
              where s.Age > 12 && s.Age < 20
              select s).ToList();
foreach(var item in result)
{
    Console.WriteLine(item.StudentName);
}

Đây là kết quả khi biên dịch và thực thi chương trình trên:

John
Bill
Ron

Xem ví dụ

Những điểm cần nhớ của cú pháp truy vấn LINQ

  1. Cú pháp truy vấn giống như cú pháp SQL (Ngôn ngữ truy vấn cấu trúc).
  2. Cú pháp truy vấn bắt đầu bằng mệnh đề from và có thể kết thúc bằng mệnh đề select hoặc group by.
  3. Sử dụng các thành phần khác như lọc, nối, nhóm, sắp xếp toán tử để xây dựng kết quả mong muốn.
  4. Biến được định kiểu ngầm định - var có thể được sử dụng để lưu trữ kết quả của truy vấn LINQ.