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 b
Trang 1Tổ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
Trang 2LINQ 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)
Trang 3Hì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
Trang 4Tạ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
Trang 5MÔ 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
Trang 6TẦ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
Trang 7this.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)
Trang 8dbDataContext 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)
Trang 9dbDataContext 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
Trang 10select 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()
Trang 11Hì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==========