Ashkii

New Member

Download miễn phí Giáo trình LINQ to SQL - Truy vấn Cơ sở dữ liệu





Gắn nối các câu truy vấn LINQ to SQL vào các control LINQ to SQL
Các câu truy vấn LINQ trả về kết quả mà nó sẽ implement interrface
IEnumerable – đây cũng là interface mà các control ASP.NET dùng để hỗ
trợ gắn nối các đối tượng. Điều này có nghĩa là bạn có thể gắn nối kết quả
của bất kỳ câu lệnh LINQ, LINQ to SQL hay LINQ to XML vào bất kỳ
control ASP.NET nào



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

Truy vấn Cơ sở dữ liệu (LINQ to SQL phần 3)
Mô hình hóa CSDL Northwind dùng LINQ to SQL
Trong phần 2 của loạt bài này, tui đã đi qua các bước để tạo một mô hình
các lớp LINQ to SQL bằng cách dùng trình LINQ to SQL có sẵn trong VS
2008. Dưới đây là một hình mà tui đã tạo dùng CSDL mẫu Northwind:
Lấy các sản phẩm
Một khi đã định nghĩa mô hình dữ liệu như trên, chúng ta có thể dễ dàng
truy vấn và lấy dữ liệu từ CSDL. LINQ to SQL cho phép bạn làm điều này
bằng cách viết các câu truy vấn dùng cú pháp LINQ với lớp
NorthwindDataContext mà chúng ta đã tạo dùng trình thiết kế LINQ to SQL
designer ở trên.
Ví dụ, để lấy và duyệt qua một tập các đối tượng Product, tui có thể viết
code như dưới đây:
A-PDF Watermark DEMO: Purchase from www.A-PDF.com to remove the watermark
Trong câu truy vấn trên, tui đã dùng một mệnh đề “where” trong cú pháp
LINQ để chỉ trả về các sản phẩm trong một category cho trước. tui hiện
đang dùng CategoryID của Product để thực hiện lọc ra các dùng mong
muốn.
Một trong những điểm hay là tui có rất nhiều lựa chọn, rất nhiều cách để tùy
biến câu lệnh, và tui có thể nắm bắt ưu điểm của mối quan hệ giữa các thực
thể mà tui đã tạo khi mô hình hóa các lớp để làm cho câu lệnh phong phú và
tự nhiên hơn. Ví dụ, tui có thể sửa lại câu truy vấn để lọc ra các dòng theo
CategoryName thay vì CategoryID bằng cách viết câu lệnh LINQ như sau:
Chú ý cách tui dùng thuộc tính “Category” trên mỗi đối tượng Product để
lọc theo CategoryName của Category chứa Product đó. Thuộc tính này được
tự động tạo ra bởi LINQ to SQL vì chúng ta đã mô hình hóa các lớp
Category và Product như một mối quan hệ một-nhiều.
Một ví dụ khác về cách dùng quan hệ trong mô hình dữ liệu bên trong các
câu truy vấn, chúng ta có thể viết câu lệnh LINQ như dưới đây để lấy về chỉ
những Product có 5 hay hơn đơn đặt hàng:
Chú ý cách chúng ta đã dùng tập hợp “OrderDetails” mà LINQ to SQL đã
tạo trên mỗi lớp Product (nhờ vào mối quan hệ một-nhiều mà chúng ta đã
mô hình hóa trong trình thiết kế LINQ to SQL).
Trực quan hóa các câu truy vấn LINQ to SQL trong trình gỡ lỗi
Các trình ánh xạ O/R (Object relational mapper) như LINQ to SQL tạo ra và
thực thi các câu lệnh SQL một cách tự động mỗi khi bạn thực hiện một câu
truy vấn hay cập nhật mô hình đối tượng của nó.
Một trong những điều quan tâm lớn nhất mà các lập trình viên mới quen với
ORM là: “Câu lệnh SQL thực sự được thực thi là gì?”. Một điều thực sự thú
vị về LINQ to SQL là nó cho phép xem rất dễ dàng câu lệnh SQL được thực
thi thực sự khi bạn chạy ứng dụng trong chế độ gỡ lỗi.
Bắt đầu từ bản Beta2 của VS 2008, bạn có thể dùng một LINQ to SQL
visualizer plug-in để xem một cách dễ dàng (và kiểm tra) bất kỳ câu lệnh
truy vấn LINQ to SQL nào. Chỉ cần đặt một breakpoint và di chuột lên trên
một câu lệnh LINQ to SQL, sau đó nhấn vào biểu tượng chiếc kính lúp để
xem giá trị của câu lệnh một cách trực quan:
Một cửa sổ sẽ hiện lên cho phép bạn xem một cách chính xác câu lệnh LINQ
to SQL mà LINQ to SQL sẽ dùng để lấy về các đối tượng Product:
Nếu bạn nhấn nút “Execute” trên cửa sổ này, nó sẽ cho phép bạn chạy câu
lệnh SQL trực tiếp trong trình debugger và xem một cách chính xác dữ liệu
được trả về:
Điều này rõ ràng làm cho việc xem những gì LINQ to SQL làm cho bạn trở
thành cực kỳ dễ dàng. Nhớ rằng bạn có thể dễ dàng thay thế câu SQL mà
LINQ to SQL thực thi nếu muốn - mặc dù trong 98% trường hợp tui nghĩ
bạn sẽ thấy rằng câu lệnh mà LINQ to SQL thực thi là thực sự, thực sự tốt.
Gắn nối các câu truy vấn LINQ to SQL vào các control LINQ to SQL
Các câu truy vấn LINQ trả về kết quả mà nó sẽ implement interrface
IEnumerable – đây cũng là interface mà các control ASP.NET dùng để hỗ
trợ gắn nối các đối tượng. Điều này có nghĩa là bạn có thể gắn nối kết quả
của bất kỳ câu lệnh LINQ, LINQ to SQL hay LINQ to XML vào bất kỳ
control ASP.NET nào.
Lấy ví dụ, bạn có thể khai báo một control trong một trang
.aspx giống như sau:
tui cũng có thể gắn nối kết quả của câu LINQ to SQL đã viết trước đây vào
GridView giống như sau:
Nó sẽ sinh ra một trang trông như sau:
Data Sharping
Hiện tại, mỗi khi xác định kết quả truy vấn, chúng ta lấy toàn bộ các cột dữ
liệu cần thiết cho các đối tượng thuộc lớp Product:
Ví dụ, câu truy vấn sau lấy về các sản phẩm:
Và toàn bộ kết quả được trả về:
Thường thì chúng ta chỉ muốn trả về một tập con của dữ liệu về mỗi sản
phẩm. Chúng ta có thể dùng chức năng data shaping mà LINQ và các trình
dich C#, VB mới hỗ trợ để chỉ ra rằng chúng ta chỉ muốn một tập con bằng
cách chỉnh sửa lại câu truy vấn như sau:
Điều này sẽ trả về chỉ một tập con dữ liệu được trả về từ CSDL:
Một điều thực sự thú vị về LINQ to SQL là tui có thể tận dụng tất cả ưu
điểm của các quan hệ trong mô hình dữ liệu khi muốn gọt giũa lại dữ liệu.
Nó cho phép tui biểu diễn đầy đủ và hiệu quả các câu truy vấn. Lấy ví dụ,
câu truy vấn dưới đây lấy về ID và Name từ thực thể Product, tổng số đơn
hàng đã được đặt cho sản phẩm đó, và rồi lấy tổng giá trị của từng đơn hàng:
LINQ to SQL đủ thông minh để có thể chuyển biểu thức LINQ ở trên thành
câu SQL dưới đây khi nó được thực thi:
Câu SQL ở trên cho phép tính toán tất cả các giá trị của NumOrders và
Revenue từ ngay trên SQL server, và trả về chỉ những dữ liệu như dưới đây
(làm cho việc thực thi được nhanh chóng):
Chúng ta có thể gắn nối tập kết quả vào control GridView để tạo ra một giao
diện đẹp hơn:
Bạn cũng có thể được hỗ trợ đầy đủ bởi chức năng intellisense bên trong VS
2008 khi viết các câu truy vấn LINQ:
Trong ví dụ trên, tui đang sử dụng một kiểu vô danh (anonymous type) và
dùng object initialization để gọt giũa và định nghĩa cấu trúc trả về. Một điều
thực sự tuyệt vời là VS 2008 cung cấp intellisense đầy đủ, kiểm tra lúc dịch
và cả refactoring khi làm việc cả với các tập kết quả có kiểu vô danh:
Phân trang kết quả truy vấn
Một trong những yêu cầu chung khi viết các trang web là bạn phải có khả
năng phân trang một các hiệu quả. LINQ cung cấp sẵn hai hàm mở rộng cho
phép bạn có thể làm điều đó một cách dễ dàng và hiệu quả – hàm Skip() và
Take().
Bạn có thể dùng Skip() và Take() như dưới đây đê chỉ ra rằng bạn chỉ muốn
lấy về 10 đối tượng sản phẩm – bắt đầu từ một sản phẩm cho trước mà
chúng ta chi ra trong tham số truyền vào:
Chú ý ở trên tui đã không dùng Skip() và Take() trong câu khai báo truy vấn
các sản phẩm – mà chỉ dùng tới khi gắn kết dữ liệu vào GridView. Mọi
người hay hỏi “Có phải làm như vậy thì câu lệnh đầu tiên sẽ lấy toàn bộ dữ
liệu từ CSDL về lớp giữa, rồi sau đó mới thực hiện việc phân trang ?”. Câu
trả lời là “Không”. Lý do là vì LINQ chỉ thực sự thực thi các câu truy vấn
khi bạn lấy kết quả từ nó mà thôi.
Một trong những ưu điểm của mô hình này là nó cho phép bạn có thể viết
các câu lệnh phức tạp bằng nhiều bước, thay vì phải viết trong một câu lệnh
đơn (g...
 

Các chủ đề có liên quan khác

Top