Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
1,17 MB
Nội dung
Chuyên đề LinQ Tổng Quan về LINQ 1. Giới thiệu về LINQ Xử lý thông tin hay dữ liệu là nhiệm vụ quan trọng nhất của bất kỳ phần mềm nào và một trong những trở ngại chính mà các nhà phát triển hiện nay phải đối mặt là khác biệt giữa ngôn ngữ lập trình hướng đối tượng và ngôn ngữ truy vấn dữ liệu, vấn đề càng phức tạp hơn với sự xuất hiện của XML (eXtensible Markup Language – ngôn ngữ đánh dấu mở rộng). LINQ là gì ? Để giảm gánh nặng thao tác trên nhiều ngôn ngữ khác nhau và cải thiện năng suất lập trình cho các lập trình viên, Microsoft đã phát triển giải pháp tích hợp dữ liệu .NET Framework có tên gọi là LINQ (Language Integrated Query). Đây là thư viện mở rộng cho các ngôn ngữ lập trình C# và Visual Basic.NET (có thể mở rộng cho các ngôn ngữ khác) nhằm cung cấp khả năng truy vấn trực tiếp dữ liệu Object, cơ sở dữ liệu và XML. Điểm mạnh của LINQ là “viết truy vấn cho rất nhiều các đối tượng dữ liệu”. Từ cơ sở dữ liệu, XML, Data Object … thậm chí là viết truy vấn cho một biến mảng đã tạo ra trước đó. Vì thế ta có các khái niệm như là LinQ to SQL, LinQ to XML,…. Các thành phần của LINQ Hình 1. Kiến trúc của LINQ trong .NET Framework 3.5 Page 1 Chuyên đề LinQ LINQ to Objects “LINQ to Objects” ở đây có nghĩa là nói đến cách sử dụng LINQ đối với các đối tượng Collection mà đã được thực thi giao diện IEnumerable hoặc IEnumerable<T> tức những Collection có thể “liệt kê” ra được. Đây là trường hợp sử dụng đơn giản nhất của LINQ khi làm việc với dữ liệu. LINQ to SQL LINQ to SQL là một phiên bản hiện thực hóa của O/RM (object relational mapping) có bên trong .NET Framework 3.5, nó cho phép bạn mô hình hóa một cơ sở dữ liệu dùng các lớp .NET. Sau đó bạn có thể truy vấn cơ sở dữ liệu dùng LINQ, cũng như cập nhật/thêm/xóa dữ liệu từ đó. LINQ to SQL hỗ trợ đầy đủ transaction, view và các stored procedure (SP). Nó cũng cung cấp một cách dễ dàng để thêm khả năng kiểm tra tính hợp lệ của dữ liệu và các quy tắc vào trong mô hình dữ liệu của bạn. LINQ to XML Sử dụng LINQ với mục đích truy vấn file XML và tiện lợi truy vấn hơn nhiều so với việc dùng XmlDocument, Xpath và Xquery như trước kia. LINQ to Datasets Giới thiệu sơ về DataSet DataSet trong ADO.NET là một bước phát triển lớn trong việc phát triển ứng dụng cơ sở dữ liệu đa hệ. Khi lấy và chỉnh sửa dữ liệu, duy trì liên tục kết nối tới Data Source trong khi chờ user (người dùng) yêu cầu thì rõ ràng là tốn tài nguyên máy rất nhiều. DataSet giúp ích ở đây rất lớn. Vì DataSet cho phép lưu trữ dữ liệu và chỉnh sửa tại ‘local cache’, hay gọi là offline mode. Có thể xem xét và xử lý thông tin trong khi ngắt kết nối. Sau khi chỉnh sửa và xem xong thì tạo một kết nối và update dữ liệu từ local vào Data Source. Dữ liệu trong DataSet được lưu trữ dưới dạng một Collection các Tables và bạn cần phải xử lý thông qua các lớp DataTable (DataRow và DataColumn). Page 2 Chuyên đề LinQ Hình 2. Kiến trúc DataSet. LINQ to DataSet cho phép người lập trình sử dụng DataSets như một nguồn dữ liệu bình thường bằng các cú pháp truy vấn căn bản của LINQ KẾT NỐI ĐẾN CSDL - View -> Server Explorer - Kích phải chuột lên DataConnection -> Add Connection Hình 3. Kết nối đến cơ sở dữ liệu. Page 3 Chuyên đề LinQ Tạo ra mô hình dữ liệu LINQ TO SQL Hình 4. Tạo mô hình LinQ to SQL. Hình 5. Tạo mô hình LinQ to SQL. Page 4 Chuyên đề LinQ MÔ HÌNH ÁNH XẠ CỦA LINQ TO SQL (ánh xạ CSDL theo hướng đối tượng) Hình 6. Mô hình ánh xạ LinQ to SQL. Page 5 Chuyên đề LinQ TẦNG KIẾN TRÚC CỦA LINQ TO SQL (là cầu nối giao tiếp giữa Application và SQL Server) Hình 7. Tầng kiến trúc của LinQ to SQL. Một số ví dụ Demo LINQ TO DATASET Dùng để truy vấn, sắp xếp, lọc dữ liệu,…nhanh và dễ dàng hơn Hình 8. Lọc dữ liệu theo khoa của LinQ to DataSet. Page 6 Chuyên đề LinQ this.view_LinqtoDataSetTableAdapter.Fill(this.dataSet_LinQtodataset.View_LinqtoDataSet, cbbKhoa.SelectedValue.ToString()); LINQ TO SQL SELECT VD: Hiển thị DL bảng SinhVien dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens select p; VD: Hiển thị DL bảng SinhVien (Lựa chọn cột hiển thị) dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens select new {p.MaSV, p.HoSV, p.TenSV}; Take,Skip VD: Lấy mẫu tin đầu tiên trong bảng(Lấy sinh viên đầu tiên trong bảng SinhVien). var sinhviens = (from p in db.SinhVien select p).Skip(0).Take(1); //Tương đương SELECT TOP 1 trong SQL VD: Tương tự trên, nhưng lấy mẫu tin cuối cùng(sinh viên cuối cùng trong bảng SinhVien). var sinhviens = (from p in db.SinhVien orderby p.MaSV descending select p).Skip(0).Take(1); VD: Tương tự trên, nhưng lấy mẫu tin thứ 5 và 6(sinh viên thứ 5 và 6 trong bảng SinhVien). var sinhviens = (from p in db.SinhVien select p).Skip(4).Take(2); Orderby VD: Sắp xếp giảm dần theo cột tên (mặc định tăng dần) Page 7 Chuyên đề LinQ dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens orderby p.TenSV descending select new {p.MaSV, p.HoSV, p.TenSV}; Distinct() //Loại bỏ các phần tử trùng nhau VD: Sắp xếp giảm dần theo cột tên dbDataContext db = new dbDataContext(); var sv = (from p in db.SinhViens select new {p.MaSV, p.HoSV, p.TenSV}).Distinct(); Where VD: Lấy điều kiện theo MaKhoa dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens where p.MaKhoa=="CN" select new {p.MaSV, p.HoSV, p.TenSV}; VD: Lấy điều kiện theo Họ (chuỗi liên quan đến) dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens where p.HoSV.Contains(“Trần“) select new {p.MaSV, p.HoSV, p.TenSV}; VD: Lấy điều kiện theo Họ (ký tự đầu tiên) dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens where p.HoSV. StartsWith (“T“) select new {p.MaSV, p.HoSV, p.TenSV}; VD: Lấy điều kiện theo Họ (ký tự cuối) Page 8 Chuyên đề LinQ dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens where p.HoSV. EndsWith (“y“) select new {p.MaSV, p.HoSV, p.TenSV}; Join VD: Liên kết nhiều bảng dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens join k in db.Khoas on p.MaKhoa equals k.MaKhoa select new {p.MaSV, p.HoSV, p.TenSV,p.TenKhoa}; Group VD: Nhóm dữ liệu (Tính tổng học bổng theo khoa) dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens join k in db.Khoas on p.MaKhoa equals k.MaKhoa group p by p.Khoa.TenKhoa into kq select new { MaSV= kq.Key,TongHB=kq.Sum(t=>t.HocBong) }; CÁC HÀM TỔNG HỢP VD: Liên kết nhiều bảng dbDataContext db = new dbDataContext(); var sv = from p in db.SinhViens join k in db.Khoas on p.MaKhoa equals k.MaKhoa group p by p.Khoa.TenKhoa into kq Page 9 Chuyên đề LinQ select new { MaSV= kq.Key,TongHB=kq.Sum(t=>t.HocBong) }; select new { MaSV= kq.Key,TongHB=kq. Average(t=>t.HocBong) }; select new { MaSV= kq.Key,SoLuongSV=kq. Count()}; select new { MaSV= kq.Key,TongHB=kq. Max(t=>t.HocBong) }; select new { MaSV= kq.Key,TongHB=kq.Min(t=>t.HocBong) }; Dùng để Thêm, Sửa, Xóa,… Thêm thông tin InsertOnSubmit()và SubmitChanges() Hình 9. Thêm thông tin vào cơ sở dữ liệu. Xóa thông tin DeleteOnSubmit()và SubmitChanges() Page 10 [...].. .Chuyên đề LinQ Hình 10 Xóa thông tin từ cơ sở dữ liệu Cập nhật thông tin SubmitChanges() Hình 11 Cập nhật thông tin xuống cơ sở dữ liệu =========XIN TẠM DỪNG Ở ĐÂY========== Page 11 . sở dữ liệu. Page 3 Chuyên đề LinQ Tạo ra mô hình dữ liệu LINQ TO SQL Hình 4. Tạo mô hình LinQ to SQL. Hình 5. Tạo mô hình LinQ to SQL. Page 4 Chuyên đề LinQ MÔ HÌNH ÁNH XẠ CỦA LINQ TO SQL (ánh. ta có các khái niệm như là LinQ to SQL, LinQ to XML,…. Các thành phần của LINQ Hình 1. Kiến trúc của LINQ trong .NET Framework 3.5 Page 1 Chuyên đề LinQ LINQ to Objects LINQ to Objects” ở đây có. theo khoa của LinQ to DataSet. Page 6 Chuyên đề LinQ this.view_LinqtoDataSetTableAdapter.Fill(this.dataSet_LinQtodataset.View_LinqtoDataSet, cbbKhoa.SelectedValue.ToString()); LINQ TO SQL SELECT VD: