Bài 8 : Thực thi các biểu thức SQL tùy biến
3. Thực hiện các phép chiếu khi truy vấn với sự kiện Selecting
Một trong những điểm mạnh của LINQ là khả năng trả về các “dạng” dữ liệu tùy biến, hay còn gọi là phép chiếu dữ liệu. Đó là khả năng mà bạn chỉ trả về một tập con các giá trị của thực thể (một số cột nào đó mà thơi), hay trả về các giá trị được tính tốn tự động bằng các biểu thức do bạn định nghĩa. Bạn có thể tìm hiểu thêm cách LINQ thực hiện các phép chiếu này trong phần 3 của loạt bài này. Ví dụ, bạn có thể sửa lại sự kiện hàm xử lý sự kiện Selecting để đưa thông tin vào cho GridView một tập tùy biến các giá trị của Product. Trong grid này, ta sẽ chỉ hiển thị ProductID, ProductName, Product UnitPrice, số lệnh đặt hàng trên sản phẩm này (Number of Orders), và doanh thu của sản phẩm (Revenue). Chúng ta có thể tính tốn động 2 giá trị cuối dùng một biểu thức LINQ như dưới đây:
LINQ to SQL Tutorial
102
C#:
Ghi chú: hàm Sum được dùng để tính tốn Revenue ở trên là một ví dụ về “Phương thức mở rộng” (Extension Method). Tham số được truyền cho hàm này là một ví dụ về biểu thức Lambda. Kiểu trả về được tạo bởi biểu thức LINQ là một kiểu vơ danh (anonymous type) và nó được hình thành từ biểu thức truy vấn. Extension Methods, Lambda Expressions, và Anonymous Types là các đặc tính mới của VB và C# trong VS 2008.
103
Ghi chú rằng việc phân trang và sắp xếp sẽ vẫn làm việc bình thường với GridView của chúng ta – dù rằng chúng ta đã chuyển sang dùng câu lệnh LINQ tùy biến.
Dù vậy, vẫn có một tính năng sẽ khơng làm việc khi dùng phép chiếu dữ liệu, đó là việc hỗ trợ cập nhật dữ liệu ngay trong GridView. Đó là vì LINQDataSource khơng biết cách nào để cập nhật dữ liệu một cách an toàn. Nếu chúng ta muốn thêm khả năng cập nhật vào cho GridView để hỗ trợ các kiểu trả về tùy biến như vậy, chúng ta hoặc sẽ phải chuyển sang dùng một control ObjectDataSource (ta phải cung cấp thêm phương thức Update để xử lý việc cập nhật), hoặc phải cung cấp thêm một trang để người dùng cập nhật – và hiển thị môt DetailsView hay FormViewgắn nối và thực thể Product để chỉnh sửa.
4. Tổng kết
Bạn có thể dễ dàng thực hiện các thao tác truy vấn thường dùng với mơ hình dữ liệu LINQ to SQL dùng khả năng khai báo các bọ lọc của LINQDataSource.
Để thực hiện biểu thức lọc phức tạp hơn, bạn có thể tận dụng ưu điểm của sự kiên Selecting có trong LINQDataSource. Điều này cho phép bạn thực hiện bất kỳ logic nào bạn muốn để lấy về các dòng dữ liệu phù hợp. Bạn có thể nhiều cách để lấy dữ liệu này, chẳng hạn dùng Query Expressions, gọi Stored Procedures, hay thực hiện một câu truy vấn tùy biến.