Kết nối

[LINQ] Phần 7: Các tính năng trong C# hỗ trợ LINQ

8.494 lượt xem 
 Cập nhật lần cuối: 16/03/2017 lúc 16:43:39

Bài viết này trình bày về các tính năng hữu dụng trong C# 3.0 hỗ trợ cho các truy vấn LINQ. Nội dung bài phần nhiều là tổng hợp các bài trước để cho chúng ta có cái nhìn tổng quan về những tính năng hỗ trợ LINQ trong C#.

Diễn giải truy vấn
Diễn giải truy vấn sử dụng 1 cú pháp khai báo tương tự như SQL hay XQuery trên các tập hợp IEnumerable. Lúc biên dịch, cú pháp truy vấn được chuyển thành các cuộc gọi phương thức tới việc thực thi của cung cấp LINQ (LINQ provider). Các ứng dụng điều khiển các toán tử truy vấn chuẩn có trong phạm vi bằng cách đặc tả không gian tên thích hợp với 1 chỉ dẫn sử dụng. Diễn giải truy vấn sau dùng 1 mảng chuỗi, gom nhóm chúng theo ký tự đầu tiên và sắp xếp các nhóm này.

var query = from str in stringArray  // dammio.com
            group str by str[0] into stringGroup  
            orderby stringGroup.Key  
            select stringGroup;

Biến kiểu ngầm định (var)
Thay vì đặc tả rõ ràng 1 kiểu khi định nghĩa 1 biến, chúng ta có thể dùng từ khóa var để chỉ dẫn trình biên dịch suy luận và gán kiểu dữ liệu, như đoạn mã sau.

var number = 51;  // trình biên dịch hiểu là kiểu integer
var name = "Vietnam";  // trình biên dịch hiểu là kiểu chuỗi
var query = from str in stringArray  // trình biên dịch hiểu là 1 mảng chuỗi
            where str[0] == 'm'  
            select str;  

Các khởi tạo tập hợp và đối tượng
Các khởi tạo này giúp có thể khởi tạo đối tượng mà không cần phải gọi 1 cách rõ ràng một khởi tạo cho đối tượng. Giả sử có 1 lớp tên là Client với 2 thuộc tính public là FullName và Website, đối tượng khởi tạo có thể sử dụng như đoạn mã sau:

Client client1 = new Client { FullName = "Mike", Webiste = "https://www.dammio.com" };  

Dạng nặc danh
Một dạng nặc danh được xây dựng bằng trình biên dịch và tên kiểu chỉ sẵn có với trình biên dịch. Các dạng nặc danh cung cấp 1 cách tiện lợi để gom nhóm 1 tập thuộc tính tạm thời trong 1 kết quả truy vấn được khởi tạo với 1 diễn giải mới và 1 khởi tạo đối tượng, như trong ví dụ sau.

select new {name = cust.Name, phone = cust.Phone};  

Các phương thức mở rộng
Một phương thức mở rộng là 1 phương thức tĩnh có thể liên kết với 1 kiểu, để nó có thể được gọi khi nó là 1 phương thức thể hiện trên kiểu đó. Tính năng này cho phép thêm các phương thức mới vào các kiểu đã tồn tại mà không cần phải thay đổi chúng. Các toán tử truy vấn chuẩn là 1 tập các phương thức mở rộng cung cấp chức năng truy vấn LINQ cho bất cứ kiểu nào mà thực thi IEnumerable<T>.

Liên quan:  [LINQ] Phần 3: Các truy vấn cơ bản trong LINQ

Diễn giải Lambda
Một diễn giải lambda là 1 hàm nội dòng dùng toán tử => để phân biệt các đối số đầu vào từ nội dung hàm và có thể chuyển đổi tại thời điểm biên dịch thành 1 ủy thác (delegate) hay 1 cây diễn giải. Trong lập trình LINQ, bạn sẽ gặp các diễn giải lambda khi bạn gọi trực tiếp các phương thức tới các toán tử truy vấn chuẩn.

Các thuộc tính tự động thực thi
Các thuộc tính tự động thực thi tạo ra các định nghĩa thuộc tính chính xác hơn. Khi bạn định nghĩa 1 thuộc tính như ví dụ sau, trình biên dịch sẽ tạo 1 trường private và nặc danh phía sau mà không thể truy cập được ngoại trừ thông qua thuộc tính set và set.

public string Address {get; set;}  

Như vậy, bài viết này đã trình bày cho bạn viết 1 số tính năng trong C# hỗ trợ LINQ. Ngoài ra, còn nhiều tính năng và ví dụ hỗ trợ LINQ nữa bạn có thể tự tìm hiểu thêm.

Trích dẫn bài viết
  • APA:
    Dammio. (2017). [LINQ] Phần 7: Các tính năng trong C# hỗ trợ LINQ. https://www.dammio.com/2017/01/02/linq-phan-7-cac-tinh-nang-trong-c-ho-tro-linq.
  • BibTeX:
    @misc{dammio,
    author = {Dammio},
    title = {[LINQ] Phần 7: Các tính năng trong C# hỗ trợ LINQ},
    year = {2017},
    url = {https://www.dammio.com/2017/01/02/linq-phan-7-cac-tinh-nang-trong-c-ho-tro-linq},
    urldate = {2024-04-28}
    }
Theo dõi
Thông báo của
guest
2 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
2
0
Rất thích suy nghĩ của bạn, hãy bình luận.x