Sử dụng thư viện LINQ Dynamic Query


LINQ (language integrated query) là một trong những tính năng mới được cung cấp cùng với VS 2008 và .NET 3.5. LINQ làm cho khái niệm truy vấn dữ liệu trở thành một trong những khái niệm cơ bản của lập trình .NET, và cho phép bạn sử dụng các câu truy vấn một cách hiệu quả trong ngôn ngữ lập trình bạn chọn.
Một trong những lợi ích của LINQ là nó cho phép bạn viết các câu truy vấn an toàn về kiểu (type-safe) trong VB và C#. Có nghĩa là trình biên dịch có thể kiểm tra kiểu dữ liệu bên trong các câu truy vấn LINQ, cũng như hỗ trợ intellisense và refactoring.

Trong khi viết các câu truy vấn an toàn kiểu là tốt nhất trong hầu hết trường hợp, trong một số trường hợp khác, bạn vẫn muốn xây dựng các câu truy vấn động một cách tùy biến hơn. Ví dụ: bạn có thể muốn cung cấp các tính năng business intelligence trong ứng dụng cho phép người dùng có thể dùng các tùy chọn để xây dựng nên câu truy vấn riêng.

Với những trường hợp như vậy, trước đây người ta thường dùng phép nối chuỗi để tạo nên các câu SQL. Gần đây một số người thường hỏi tôi về cách xử lý các trường hợp như vậy trong LINQ. Bài viết dưới đây sẽ mô tả cách bạn có thể dùng Dynamic LINQ được cung cấp bởi nhóm LINQ để xây dựng động các câu truy vấn.

Tải về thư viện LINQ Dynamic Query

Bao gồm trên trang tải về các ví dụ mẫu trong VS 2008 là các con trỏ đến các gói chương trình mẫu VB và C#, trong đó có cả một thư viện trợ giúp dynamic query LINQ.  Bạn có thể truy cập trực tiếp đến thư viện này (và cả tài liệu) thông qua các đường link sau:

Cả các ví dụ  DynamicQuery VB và C# đều bao gồm mã nguồn của thư viện trợ giúp cho phép bạn xây dựng các câu truy vấn dùng các phương thức mở rộng cho phép nhận vào các chuỗi tham số thay vì các toán tử an toàn kiểu. Bạn có thể cắt/dán mã lện VB hoặc C# của thư viện DynamicQuery vào trong dự án riêng của bạn và dùng nó ở chỗ thích hợp để có thể xây dựng các câu truy vấn LINQ một cách động hơn dựa trên dữ liệu đầu vào của người dùng.

Ví dụ về Dynamic Query Library

Bạn có thể dùng thư viện DynamicQuery cùng với bất kỳ LINQ data provider (bao gồm LINQ to SQL, LINQ to Objects, LINQ to XML, LINQ to Entities, LINQ to SharePoint, LINQ to TerraServer, …). Thay vì dùng các toán tử của ngôn ngữ hay các phương thức mở rộng để xây dựng các câu truy vấn LINQ, thư viện DynamicQuery cung cấp cho bạn các phương thức mở rộng dựa trên các chuỗi để bạn có thể chuyển bất kỳ chuỗi biểu thức nào vào.

Trong ví dụ sau có một câu truy vấn LINQ to SQL chuẩn mà nó lấy dữ liệu từ CSDL Northwind và hiển thị trong một control ASP.NET GridView:

Dùng thư viện LINQ DynamicQuery, tôi có thể viết lại câu truy vấn ở trên như sau:

Chú ý cách viết biểu thức điều kiện trong where và mệnh đề order by, thay vì viết các mã lệnh thì viết sẽ dùng các biểu thức chuỗi. Bởi vì các chuỗi này chỉ được gắn nối về sau nên tôi có thể xây dựng động nó, ví dụ tôi có thể xây dựng một giao diện cho phép người dùng chọn lựa các thành phần và giá trị để xây dựng nên một câu truy vấn riêng.

Tài liệu thư viện Dynamic Query

Bao gồm trong các ứng dụng mẫu Dynamic Query C# và VB trên là một số tài liệu HTML mô tả cách dùng các phương thức mở rộng Dynamic LINQ một cách chi tiết. Nó rất có giá trị nếu bạn muốn thao khảo sâu hơn về thư viện này:

Tải về và chạy một ứng dụng mẫu Dynamic Query

Bạn có thể tải về và chạy các ứng dụng VB và C# mẫu biểu diễn cách dùng Dynamic LINQ trong một web site ASP.NET để truy vấn CSDL Northwind dùng LINQ to SQL:

Bạn có thể dùng Visual Web Developer 2008 Express (miễn phí) hay VS 2008 để mở và chạy chúng.

Những cách tiếp cận khác để xây dựng các câu truy vấn LINQ động

Dùng Dynamic LINQ tương đối đơn giản và dễ dùng, và nó đặc biệt hữu ích trong trường hợp các câu truy vấn hoàn toàn động và bạn muốn cung cấp giao diện cho người dùng tự xây dựng chúng.

Trong một bài viết khác, tôi sẽ đào sâu hơn vào việc xây dựng các câu truy vấn động trong LINQ, và thảo luận về các cách tiếp cận khác mà bạn có thể dùng để xây dựng nên mã lệnh bằng cách sử dụng các phương thức an toàn kiểu (Joseph và Ben Albahari, các tác giả của cuốn sách C# 3.0 In a Nutshell, có một bài viết hay về vấn đề này tại đây).

Theo blog ScottGu

5 thoughts on “Sử dụng thư viện LINQ Dynamic Query

  1. – Bữa giờ loay hoay đọc lung tung trên mạng để tìm cách làm sao chuyển các store trong SQL thành kiểu viết LINQ, nhưng không có kết quả.
    – Vô tình đọc bài viết “Sử dụng thư viện LINQ Dynamic Query” của a Hảii Nam đã gỡ bỏ gút mắt.

    Thanks anh nhiều lắm.

  2. Cho mình hỏi làm sao để kết được 2 bảng?
    vd: bảng BaiHat có thuộc tính maCaSi
    mình muốn kết với bảng CaSi để lấy tenCaSi, bind lên gridview

  3. em cảm ơn anh ah. bai nay dễ hiểu lắm ạ,anh ơi,pót thêm nhiêu bai hay như vậy nữa nha anh..hihi

  4. sao khi em add cai DynamicLinq vao no bao lỗi tùm lum vậy nhỉ?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s