Cấp bậc tác giả:

DOTNET

Tìm hiểu và nghiên cứu sử dụng LINQ(hỗ trợ MS-SQL)

Được viết bởi QuangIT ngày 31/07/2012 lúc 01:15 PM
LINQ là công nghệ mới mà microsoft trình làng trong visual 2008. LINQ là 1 bước tiến mới trong cách thức truy xuất và làm việc với XML, database(mới chỉ hỗ trợ MS-SQL), và Object dựa trên 1 cú pháp duy nhất, các câu lệnh LINQ gần tương tự câu lệnh SQL.
  • 0
  • 9487
Tải tệp tin: Click ở đây

Tìm hiểu và nghiên cứu sử dụng LINQ(hỗ trợ MS-SQL)

LINQ là công nghệ mới mà microsoft trình làng trong visual 2008.
LINQ là 1 bước tiến mới trong cách thức truy xuất và làm việc với XML, database(mới chỉ hỗ trợ MS-SQL), và Object dựa trên 1 cú pháp duy nhất, các câu lệnh LINQ gần tương tự câu lệnh SQL.
Sau đây mình xin giới thiệu các bước cơ bản để tạo 1 ứng dụng LINQ to SQL
Đầu tiên các bạn tạo 1 application như sau (bao gồm Form và 1 DataGridView có name là Products):




Bước 1 : Ở Solution Explorer/ chọn Project của mình chọn “add”/ “New Item”à/ Chọn “LINQ to SQL Classes”àItem” bạn change name thành “Northwind.dbml”/ Nhấn nút “Add”
Bước 2 : sau khi tạo Northwind.dbml, khung thiết kế cho Northwind.dbml được hiển thị, 
Bạn vào View/ Chọn Server Explorer (Ctrl + W,L) bạn tạo kết nối đến CSDL Northwind và bắt đầu kéo các bảng từ Server Explorer vào khung design của Northwind.dbml (làm tương tự như ADO trong visual 2005). Ở đây mình chỉ kéo 5 bảng là Tbl_DanToc, Tbl_TonGiao, Tbl_KhuVuc, Tbl_QueQuan, Tbl_ThongTinSV.



Bước 3 : Sau khi kéo các bảng vào, bạn nhớ nhấn Ctrl + S để lưu các thiết lập mình vừa thiết kế.
Khi bạn kéo các bảng vào như thế, visual 2008 tự động sinh ra cho bạn 6 classes:
- Class Tbl_DanToc bao gồm các properties get – set các trường của bảng Tbl_DanToc trong CSDL Northwind
- Class Tbl_TonGiao bao gồm các properties get – set các trường của bảng Tbl_TonGiao trong CSDL Northwind
- Class Tbl_KhuVuc bao gồm các properties get – set các trường của bảng Tbl_KhuVuc trong CSDL Northwind
- Class Tbl_QueQuan bao gồm các properties get – set các trường của bảng Tbl_QueQuan trong CSDL Northwind
- Class Tbl_ThongTinSV bao gồm các properties get – set các trường của bảng Tbl_ThongTinSV trong CSDL Northwind
- Class NorthwindDataContext Class này được thừa kế từ class System.Data.Linq.DataContext chịu trách nhiệm dựa vào các mô tả của 5 class để thao tác với CSDL.

Bước 4 : Bạn bắt đầu hưởng thành quả đầu tiên và đơn giản nhất ^^!!
Trong sự kiện Form_Load bạn viết như sau : 

private void Form1_Load(object sender, EventArgs e)
{
NorthwindDataContext Context = new NorthwindDataContext();
this.Products.DataSource = Context.Tbl_TonGiaos;
}



SELECT bằng LINQ
Một số câu lệnh select đơn giản với LINQ :
Vẫn trong sự kiện Form_Load
- Câu lệnh Select với điều kiện TenTG=”Phật Giáo”;
private void Form1_Load(object sender, EventArgs e)
{

NorthwindDataContext Context = new NorthwindDataContext();
IEnumerable<Tbl_TonGiao> AllProducts = from c in Context.Tbl_TonGiaos where c.TenTG.Contains("Phật giáo")select c;
this.Products.DataSource = AllProducts;
}


ở đây ‘c’ đóng vai trò như con trỏ, chạy qua từng bản ghi trong Tbl_TonGiao, nếu TenTG=”Phật Giáo” nó sẽ được ghi nhận, nếu TenTG!=”Phật Giáo” nó sẽ bỏ qua


Ở đây nếu bạn chú ý: 
.TenTG.Contains("Phật giáo")thì chương trình chạy ngon lành
nhưng :
.TenTG.Contains(‘Phật giáo’)chương trình chạy đến: this.Products.DataSource = AllProducts; thì báo lỗi, có lẽ là 1 thiếu sót của microsoft

Câu lệnh Select join giữa 2 bảng Tbl_ThongtinSV và Tbl_tonGiao:
private void Form1_Load(object sender, EventArgs e)
{
NorthwindDataContext Context = new NorthwindDataContext();
var results = from c in Context.Tbl_TonGiaos join d in Context.Tbl_thongtinSVs on c.MaTG equals d.MaTG selectnew { d.MaSV, d.ho, d.ten, c.MaTG, c.TenTG };
this.Products.DataSource = results;
}


Notes :“var results” Từ khóa var Cho phép bạn khai báo 1 biến mà không cần biết nó thuộc loại biến nào, bạn không phải nhọc công : int a = 5; string b=’”LINQ”; mà chỉ cần var;
Khi bạn khai báo var num = 5; thì biến num tự động được hiểu là kiểu int, Nó rất hữu dụng khi bạn ko rõ kiểu trả về là kiểu gì
Như trường hợp trên, câu lệnh:
from c in Context.Tbl_TonGiaos join d in Context.Tbl_thongtinSVs on c.MaTG equals d.MaTG select new { d.MaSV, d.ho, d.ten, c.MaTG, c.TenTG };
mình không xác định được kiểu trả về là kiểu gì thế nên cứ ‘var’ ^^!! 
Cơ chế hoạt động của câu lệnh trên tương tự câu lệnh inner join trong SQL, chắc các bạn đã biết 

Insert bằng LINQ:
private void Form1_Load(object sender, EventArgs e)
{

Tbl_TonGiao NewTG = new Tbl_TonGiao();
NewTG.MaTG = "TG0005";
NewTG.TenTG = "Hindu";
NewTG.TrangThai = true;
NorthwindDataContext Context = new NorthwindDataContext();
Context.Tbl_TonGiaos.InsertOnSubmit(NewTG);
Context.SubmitChanges();
}


Delete bằng LINQ:
Trường hợp 1 : Delete nhiều bản ghi cùng 1 lúc :
private void Form1_Load(object sender, EventArgs e)
{
NorthwindDataContext Context = new NorthwindDataContext();
IEnumerable<Tbl_TonGiao> TG = from c in Context.Tbl_TonGiaos where c.TenTG.Contains("Phật giáo"select c;
Context.Tbl_TonGiaos.DeleteAllOnSubmit(TG);
Context.SubmitChanges();
}
Tbl_TonGiaos là các bản ghi mà bạn muốn delete, sau đó bạn dùng Method DeleteAllOnSubmit để cùng 1 lúc delete hết các bản ghi này
Trường hợp 2 : Delete từng bản ghi :
private void Form1_Load(object sender, EventArgs e)

NorthwindDataContext Context = new NorthwindDataContext();
IEnumerable<Tbl_TonGiao> TG = from c in Context.Tbl_TonGiaos where c.TenTG.Contains("Phật giáo"select c;
foreach (Tbl_TonGiao product in TG)
{
Context.Products.DeleteOnSubmit(product);
}
Context.SubmitChanges();
}
Update bằng LINQ :
private void Form1_Load(object sender, EventArgs e)

NorthwindDataContext Context = new NorthwindDataContext();
IEnumerable<Tbl_TonGiao> TG = from c in Context.Tbl_TonGiaos where c.TenTG.Contains("Phật giáo"select c;
foreach (Tbl_TonGiao product in TG)
{
product.TenTG = "Phát xít";
}
Context.SubmitChanges();
}

Nguồn bài viết: Dngaz.com

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML