Bài đăng nổi bật

Hướng dẫn này sẽ giới thiệu cho bạn những kiến ​​thức cơ bản về LINQ framework và cung cấp cho bạn bản tóm tắt về kiến ​​trúc LINQ, trình cung cấp dữ liệu và cấu trúc truy vấn.

Giới thiệu

Trước khi LINQ được giới thiệu như một phần của .NET framework trong Visual Studio 2008, các nhà phát triển phải truy vấn collection bằng các vòng lặp cũ và câu lệnh điều kiện. Code viết rắc rối và dễ bị lỗi. Hãy xem đoạn mã này, đoạn mã này cho thấy cách dữ liệu có thể được truy cập mà không có LINQ.

  1. int[] numbers = { 3, 6, 7, 9, 2, 5, 3, 7 };
  2. int i = 0;
  3.  
  4. // Display numbers larger than 5
  5. while (i < numbers.GetLength(0))
  6. {
  7. if (numbers[i] > 5)
  8. Console.WriteLine(numbers[i]);
  9. ++i;
  10. }

May mắn thay, LINQ đã đến giải cứu và biến đoạn mã như trên trở thành dĩ vãng. Với LINQ, các nguồn dữ liệu giờ đây có thể được truy vấn theo cú pháp giống SQL , như được hiển thị trong đoạn mã được viết lại bên dưới:

  1. int[] numbers = { 3, 6, 7, 9, 2, 5, 3, 7 };
  2.  
  3. var res = from n in numbers
  4. where n > 5
  5. select n;
  6.  
  7. foreach (int n in res)
  8. Console.WriteLine(n);

Bạn sẽ nhận ra nhiều câu lệnh SQL tương tự trong LINQ, như SelectWhereDistinct và Group By.

Data Providers

Bạn có thể quan tâm đến việc truy vấn dữ liệu từ nhiều nguồn khác nhau, chẳng hạn như mảng, từ điển, xml và các thực thể được tạo từ khung thực thể. Nhưng thay vì phải sử dụng một API khác nhau cho mỗi nguồn dữ liệu, LINQ cung cấp một mô hình lập trình nhất quán và thống nhất để làm việc với tất cả các nguồn dữ liệu được hỗ trợ. Nói cách khác, truy vấn LINQ để tìm nạp một phần tử từ một mảng và một tệp xml sẽ trông rất giống nhau.

Một số nguồn dữ liệu LINQ được sử dụng nhiều nhất, tất cả đều là một phần của .NET framework, là:

  • LINQ to Objects : cho các bộ sưu tập trong bộ nhớ dựa trên IEnumerable , chẳng hạn như Từ điển và Danh sách .
  • LINQ to Entities : dành cho Entity Framework trên ngữ cảnh đối tượng.
  • LINQ to XML : dành cho các tài liệu XML trong bộ nhớ.

Miễn là bạn bao gồm không gian tên System.Linq trong mã của mình, bạn có thể sử dụng tất cả các nguồn dữ liệu trên.

Kiến trúc

Bạn có thể sử dụng LINQ từ tất cả các ngôn ngữ .NET phổ biến (C #, VB.NET và F#) như được minh họa trong tổng quan kiến ​​trúc bên dưới. Các ngôn ngữ có thể truy vấn bất kỳ Nguồn dữ liệu LINQ nào, với sự trợ giúp của lớp được gọi là Truy vấn tích hợp ngôn ngữ .NET (LINQ).

Hình 1: Kiến trúc LINQ.

Điều đáng chú ý là mặc dù tất cả các ngôn ngữ .NET đều chia sẻ cùng một lớp LINQ (hình chữ nhật tròn màu xanh lá cây), một số ngôn ngữ được "kích hoạt" nhiều LINQ hơn những ngôn ngữ khác. Ví dụ, F# cung cấp nhiều chức năng LINQ hơn C# và VB.NET.

Cấu trúc truy vấn

LINQ cung cấp hai cách để viết truy vấn: 1) với cú pháp giống SQL được gọi là biểu thức Truy vấn hoặc 2) một phương thức giống như cách tiếp cận được gọi là biểu thức Lambda

Hãy lấy một ví dụ nhỏ để có cái nhìn rõ hơn về cấu trúc truy vấn: Trong tập hợp các số ngẫu nhiên, chúng ta chỉ muốn lấy các giá trị lớn hơn 50, sắp xếp chúng theo thứ tự tăng dần và cuối cùng truyền kết quả thành chuỗi. Điều này thường yêu cầu khá nhiều dòng mã, nếu bạn phải làm điều này với các vòng lặp và điều kiện mã, nhưng với biểu thức truy vấn LINQ, bạn có thể chỉ cần viết:

  1. int[] numbers = { 7, 53, 45, 99 };
  2.  
  3. var res = from n in numbers
  4. where n > 50
  5. orderby n
  6. select n.ToString();

Biểu thức truy vấn luôn bắt đầu bằng "từ phần tử trong bộ sưu tập" và lặp qua từng phần tử trong bộ sưu tập. Giống như trong các câu lệnh SQL, bạn có thể lọc hoặc chiếu thêm truy vấn của mình, như chúng tôi đã làm với where , orderby và select . Câu lệnh cuối cùng, "select n.ToString ()" chiếu kết quả cuối cùng thành các chuỗi (“53” và “99”).

Bạn cũng có thể viết nó dưới dạng một biểu thức Lambda, như đã đề cập trước đó. Sau đó, bạn nhận được một cấu trúc giống như phương thức:

  1. int[] numbers = { 7, 53, 45, 99 };
  2.  
  3. var res = numbers.Where(n => n > 50)
  4. .OrderBy(n => n)
  5. .Select(n => n.ToString());

N => n…" tạo ra một thể hiện của mỗi phần tử được lặp lại trong tập hợp. Ở phía bên trái của "=>" là các tham số đầu vào và ở phía bên kia là biểu thức.

Tôi hy vọng hướng dẫn này hữu ích trong việc giới thiệu cho bạn về LINQ <3

Đọc thêm về LINQ trên tài liệu chính thức của Microsoft. 

Post a Comment

أحدث أقدم