Thứ bảy, ngày 3 tháng 12 năm 2016

LINQ-Phần 2: Thưc thi dữ liệu.

Ngày đăng: 2/7/2011, 9:17:19AM | Lượt xem: 6,103
Hot!

Trong phần trước tôi đã hướng dẫn cách truy vấn dữ liệu cơ bản. Tôi nghĩ các bạn đã hiểu cơ bản về cách truy vấn. Tuy nhiên để hiểu rỏ hơn về truy vấn trong Linq thì bao nhiêu đó là chưa đủ. Trong phần 2 này bao gồm cách thêm mới , chỉnh sửa và xóa mẫu tin trong Linq.

Trong Linq bạn có thể đơn giản hóa code của mình rất nhiều. Nên chú ý rằng phương thức SubmitChanges() là rất quan trọng, vì khi nào phương thức này được triệu gọi thì thông tin mới được lưu xuống Database. Chú ý thứ hai là SubmitChanges() trong Linq To SQL được thay bằng SaveChanges() trong ADO.NET Entity Data Model. Sau đây nhứng ví dụ minh họa về thực thi dữ liệu trong Linq.

Ta bắt đầu bằng việc minh họa thêm môt mẫu tin vào bảng Order Details.

Order_Detail detail = new Order_Detail();
detail.OrderID = 10248;
detail.ProductID = 1;
detail.Quantity = 10;
detail.UnitPrice = 10;
detail.Discount = 0;
context.Order_Details.InsertOnSubmit(detail);
context.SubmitChanges();

Hoàn toàn có thể thêm nhiều đối tượng cùng lúc trong Linq trước khi gọi SubmitChanges() như đã trình bày ở trên.

Order_Detail detail = new Order_Detail();
detail.OrderID = 10248;
detail.ProductID = 1;
detail.Quantity = 10;
detail.UnitPrice = 10;
detail.Discount = 0;
context.Order_Details.InsertOnSubmit(detail);

Order_Detail detail2 = new Order_Detail();
detail2.OrderID = 10248;
detail2.ProductID = 2;
detail2.Quantity = 20;
detail2.UnitPrice = 20;
detail2.Discount = 0;
context.Order_Details.InsertOnSubmit(detail2);
context.SubmitChanges();

Có thể thêm nhiều đối tượng cùng lúc bằng InsertAllOnSubmit thay vì InsertOnSubmit. Tuy nhiên phải thông qua 1 collection. Ở đây tôi dùng đối tượng List.

List<Order_Detail> details = new List<Order_Detail>();
Order_Detail detail = new Order_Detail();
detail.OrderID = 10248;
detail.ProductID = 1;
detail.Quantity = 10;
detail.UnitPrice = 10;
detail.Discount = 0;
details.Add(detail);

Order_Detail detail2 = new Order_Detail();
detail2.OrderID = 10248;
detail2.ProductID = 2;
detail2.Quantity = 20;
detail2.UnitPrice = 20;
detail2.Discount = 0;
details.Add(detail2);

context.Order_Details.InsertAllOnSubmit(details);
context.SubmitChanges();

Tính năng quan trọng của Linq nữa là cho phép thêm dữ liệu con của thông tin. Chẳng hạn như bạn thêm mới 1 hóa đơn và bạn có thể thêm luôn thông tin về hàng hóa của hóa đơn đó. Theo tôi thì tính năng này rất tiện lợi. Nó được sử dụng để giảm thiểu số lần đi về giữa Client và Server.

Order order = new Order();
order.OrderID = 1000;
order.CustomerID = "VINET";
order.EmployeeID = 5;
order.OrderDate = DateTime.Now;

Order_Detail detail = new Order_Detail();
detail.ProductID = 1;
detail.Quantity = 10;
detail.UnitPrice = 10;
detail.Discount = 0;
order.Order_Details.Add(detail);
context.Orders.InsertOnSubmit(order);
context.SubmitChanges();

Chú ý: InsertOnSubmit được thay thế bằng AddObject trong ADO.NET Entity Data Model.

So với thêm mới thì cập nhật đơn giản hơn rất nhiều. Theo tôi thì chỉ phổ biến 2 cách sau.

Order_Detail detail = context.Order_Details.Single(o => o.OrderID == 10248 &&
o.ProductID == 1);
detail.ProductID = 7;
detail.Quantity = 50;
context.SubmitChanges();

Cách này được dùng phổ biến khi cần thay đổi nhiều mẫu  tin cùng lúc.

var detail = from od
in context.Order_Details
where od.OrderID == 10248 && od.ProductID == 1
select od;
foreach (var item in detail)
{
detail.ProductID = 7;
item.Quantity = 15;
}
context.SubmitChanges();

Và cuối cùng là xóa mẫu tin. Ta có thể xóa một hay nhiều mẫu tin cùng lúc bằng phương thức DeleteOnSubmitDeleteAllOnSubmit.

Order_Detail detail = context.Order_Details.Single(o => o.OrderID == 10248
&& o.ProductID == 1);
context.Order_Details.DeleteOnSubmit(detail);
context.SubmitChanges();

var detail = from od
in context.Order_Details
where od.OrderID == 10248 && od.ProductID == 1
select od;
foreach (var ite (var item
in detail)
{
context.Order_Details.DeleteOnSubmit(item);
}
context.Scontext.SubmitChanges();

var detail = from od
in context.Order_Details
where od.OrderID == 10248 && (od.ProductID == 1 || od.ProductID == 2)
select od;
context.Order_Details.DeleteAllOnSubmit(detail);
context.SubmitChanges();

Giống như thêm mới. DeleteOnSubmit được thay bằng DeleteObject trong ADO.NET Entity Data Model.

Sau bài viết này hi vọng các bạn có được cái nhìn sở lược về thực thi dữ liệu trên Linq. Và chắc chắn là còn rất nhiều thiếu xót trong bài viết này. Hy vọng là nhận được góp ý từ các bạn. Trong bài tiếp theo tôi sẻ trình bày cách thực thi dữ liệu với Transaction.

 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.