Tên bài viết: Hướng dẫn sử dụng LINQ
Tác giả: Quang.It
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Hướng dẫn chi tiết cách sử dụng LINQ từ select, insert, delete cả bảng đến từng hàng, cập nhật(Update)
------------------------------------------------------------------------------------------
Giới thiệu:
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 :
Tác giả: Quang.It
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Hướng dẫn chi tiết cách sử dụng LINQ từ select, insert, delete cả bảng đến từng hàng, cập nhật(Update)
------------------------------------------------------------------------------------------
Giới thiệu:
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;
}
{
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;
}
{
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 select new { d.MaSV, d.ho, d.ten, c.MaTG, c.TenTG };
this.Products.DataSource = results;
}
{
NorthwindDataContext Context = new NorthwindDataContext();
var results = 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 };
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 };
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();
}
{
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();
}
{
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();
}
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();
}
{
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();
}
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();
}
{
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();
}
0 comments:
Post a Comment