LinQ là gì và vì sao nên dùng LinQ?
I. LinQ là gì?
II. Sử dụng LinQ
![]() |
Câu lệnh SELECT trong SQL được thực hiện bởi LINQ |
1. Khởi tạo đối tượng LinQ to SQL
2. Truy vấn dữ liệu
1
|
DB.DBDataContext db = new DB.DBDataContext(); |
1
|
|
Có 2 kiểu truy vấn dữ liệu:
Query Syntax
1
2
3
4
5
6
7
8
9
10
11
12
|
var abc = from p in db.tbTests where p.id > 10 select p; // Hoặc chọn một số trường var abc = from p in db.tbTests where p.id > 10 select new { p.id, p.Feild1 }; |
Method Syntax
1
|
var xyz = db.tbTests.Where(p => p.id > 10).Select(p => new { p.id, p.Feild1 }); |
1
|
|
Câu truy vấn SQL tương ứng
1
2
3
4
|
SELECT [id] ,[Feild1] FROM [dbo].[tbTest] WHERE [id] > 10 |
Chọn từ nhiều bảng theo kiểu Inner Join (lấy những bản ghi có điều kiện thỏa mãn)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
// Query Syntax var result = from p in products join c in categories on p.CategoryID equals c. CategoryID select new { ProductName=p.ProductName, CategoryName=c.CategoryName }; // Hoặc chọn từ 2 bảng bằng cách from 2 lần :) var result = from p in products from c in categories where p.ProductName equals c.CategoryName select new { ProductName=p.ProductName, CategoryName=c.CategoryName }; // Method Syntax var result = products.Join( categories, p=>p.CategoryID, c=>c.CategoryID, (p,c) => new { ProductName=p.ProductName, CategoryName=c.CategoryName }); |
Cú pháp khác tương tự các câu lệnh trong SQL.
Các biến ở trên trả về có kiểu IEnumrable, 1 loại kiểu dữ liệu giống như List. Các thao tác cơ bản với loại biến này:
- xyz.FirstOrDefault(): Chọn bản ghi đầu tiên hoặc mặc định
- xyz.Skip(5): Nhảy qua n bản ghi
- xyz.Take(5): Lấy n bản ghi đầu tiên
- xyz.ToList(): Chuyển sang kiểu List
- xyz.Count(): đếm số bản ghi
- xyz.Select(...), xyz.Where(...), xyz.Join(...): Các câu lệnh truy vấn theo kiểu Method Syntax
- bla bla
Đôi khi bạn không tìm được cú pháp thích hợp hoặc LinQ không hỗ trợ loại truy vấn mà vốn có trong SQL thì bạn có thể thực hiện trực tiếp câu lệnh đó thông qua LinQ:
1
|
var result = db.ExecuteQuery< int >( "SELECT NEXT VALUE FOR seq_tbCanBo" ) |
3. Thêm, sửa, xóa dữ liệu thông qua LinQ
1
2
3
4
|
DB.tbTest a = new DB.tbTest(); // Khai báo đối tượng mới a.Feild1 = txtFeild1.Text; // id là giá trị tự động tăng > ko cần thay đổi db.tbTests.InsertOnSubmit(a); // Thêm đối tượng a vào db.SubmitChanges(); // Lưu thay đổi |
1
|
|
1
2
3
4
5
|
var a = (from p in db.tbTests where p.id == int .Parse(txtId.Text) select p).FirstOrDefault(); a.Feild1 = txtFeild1.Text; db.SubmitChanges(); |
1
|
|
1
2
3
4
5
|
var a = (from p in db.tbTests where p.id == int .Parse(txtId.Text) select p).FirstOrDefault(); db.tbTests.DeleteOnSubmit(a); db.SubmitChanges(); |
III. Bindding
Giả sử ta thực hiện Bindding ở 1 bảng, có 2 chế độ (kiểu hiển thị) là GridView và Detail:
- Chế độ GridView: có 1 gridview để hiển thị các bản ghi trong bảng, tương tự như khi chúng ta chạy câu truy vấn SELECT * trong SQL
- Detail: các Control cho phép thay đổi giá trị của bản ghi đang được chọn ở Gridview. Khi click vào 1 hàng ở Gridview thì dữ liệu của hàng đó sẽ được điền tự động vào các Control này.
![]() |
Tạo Bindding bằng cách kéo thả |
1
2
3
4
5
|
// DataSource là 1 bảng có sẵn tbTestBindingSource.DataSource = db.tbTests; // Datasource là một đối tượng IEnumrable lấy từ truy vấn LINQ tbTestBindingSource.DataSource = result; |
1
|
|
Bạn có thể kéo 1 BinddingNavigator để thực hiện các thao tác thêm, xóa dễ dàng
Khi đã có Bindding như thế này rồi thì việc thêm sửa xóa cực kỳ đơn giản, không cần code nhiều, sau khi thay đổi trên gridview, detail để lưu tất cả các thay đổi chỉ cần
1
2
|
tbTestBindingSource.EndEdit(); db.SubmitChanges(); |
Các thao tác có thể làm với BinddingSource
1
2
3
4
5
6
7
8
9
|
tbTestBindingSource.RemoveCurrent(); // Xóa hàng hiện tại // Di chuyển trên gridview tbTestBindingSource.MoveFirst(); tbTestBindingSource.MoveLast(); tbTestBindingSource.MoveNext(); tbTestBindingSource.MovePrevious(); tbTestBindingSource.Position = 5; // Xác định vị trí cho Bindding |
Sau số thao tác thay đổi trên grid view, bạn muốn xem số hàng thêm mới, sửa xóa??
1
2
3
|
int insert = db.GetChangeSet().Inserts.Count; int update = db.GetChangeSet().Updates.Count; int delete = db.GetChangeSet().Deletes.Count; |
Trên đây là tất cả những gì có trong LinQ là gì và vì sao nên dùng LinQ? mà chúng tôi muốn chia sẻ với các bạn. Bạn ấn tượng với điều gì nhất trong số đó? Liệu chúng tôi có bỏ sót điều gì nữa không? Nếu bạn có ý kiến về LinQ là gì và vì sao nên dùng LinQ?, hãy cho chúng tôi biết ở phần bình luận bên dưới. Hoặc nếu thấy bài viết này hay và bổ ích, xin đừng quên chia sẻ nó đến những người khác.

Post Comment
(*) Lưu ý:
+ 1: Bạn phải sử dụng email thật, một email xác thực sẽ được gửi đi sau khi bạn gửi comment để xác nhận bạn không phải là người máy. Nếu bạn không xác nhận email, comment của bạn CHẮC CHẮN sẽ không được duyệt.
+ 2: Bạn chỉ cần xác thực email cho lần đầu tiên, những lần sau sẽ không cần xác thực
+ 3: Chúng tôi sẽ không hiển thị công cộng email của bạn