Cách tốt nhất để xóa nhiều bản ghi trong một lần bằng LINQ là gì?Cách tốt nhất để xóa nhiều bản ghi trong truy vấn LINQ?
Trả lời
Các SPROC cũ tốt .....
Bạn có thể kéo các SPROC để DBML file của bạn và nó sẽ tạo ra một phương pháp giàu trong lớp databasecontext của bạn.
Để xóa các bản ghi với Linq2Sql
CustomerDataContext ctx = new CustomerDataContext("connection string"); var customers = ctx.Customers.Where(c => c.Name == "david"); ctx.Customers.DeleteAllOnSubmit(customers); ctx.SubmitChanges();
Đây là một trong những cách dễ nhất nhưng tôi không nói là hiệu quả nhất. Có thực sự không phải là bất kỳ tối ưu hóa được thực hiện. SQL được tạo liệt kê tất cả các đối tượng phù hợp với truy vấn của bạn, sau đó tự lặp lại chúng để xóa chúng. Xem bài đăng này - http://stackoverflow.com/questions/869209/bulk-deleting-via-linq – David
Nếu bạn không sử dụng LINQ to SQL, hãy xem http://stackoverflow.com/q/1781175/24267 – mhenry1384
Không thể chuyển đổi hoàn toàn loại 'System.Linq.IQueryable
Sau đây là nhiều hơn cho LINQ to Entities, nhưng nó có thể giúp:
lẽ litle nó trễ cho câu trả lời này nhưng hôm nay tôi chạy vào này yêu cầu bản thân mình tôi và tôi đã đưa ra giải pháp này
CustomerDataContext ctx = new CustomerDataContext("connection string");
ctx.Customers.DeleteAllOnSubmit(ctx.Customers.Where(c => c.Name == "david"));
ctx.SubmitChanges();
Chắc chắn bạn không thể yêu cầu có 'đi lên' với giải pháp đó khi tất cả các bạn đã làm là di chuyển khai báo 'cust' từ câu trả lời phổ biến nhất sang phương thức' DeleteAllOnSubmit'. – Sheridan
Tôi đồng ý với Khurram, nó nhiều hiệu quả hơn để làm điều này với một thủ tục lưu trữ đơn giản với LINQ (miễn là bạn có đủ quyền trong SQL để thực hiện việc này). Tôi sẽ tăng cường điều này với một ví dụ.
Các thủ tục lưu trữ:
CREATE PROCEDURE [dbo].[RemovePermissionsFromRole]
(
@ROLE_ID int
)
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM [RolePermissions] WHERE [RoleID] = @ROLE_ID;
END
Kéo thủ tục lưu trữ từ cơ sở dữ liệu nhà thám hiểm vào các phương pháp pane trong tập tin DBML của bạn. Lưu các tập tin. Và trong mã:
if (Request.QueryString["RoleID"] != null) {
int roleID = Convert.ToInt32(Request.QueryString["RoleID"]);
SETSDataContext context = new SETSDataContext();
context.RemovePermissionsFromRole(roleID);
}
Sử dụng khuôn khổ tổ chức 6
// Database context
EntitiesContext db = new EntitiesContext(connString);
// Select all the records to be deleted
IEnumerable<entity> list = db.entity.where(x=>x.id == id).toList();
// Use Remove Range function to delete all records at once
db.entity.RemoveRange(list);
// Save changes
db.SaveChanges();
Loại bỏ nhiều hồ sơ dựa trên đơn mệnh đề where
context.EntityModel
.RemoveAll(r => r.property == "propertyEntered");
Nhưng bạn cũng có thể loại bỏ các bản ghi từ cơ sở dữ liệu mà không làm tồn tại trong List<ListOfBadRecords>
context.EntityModel
.Where(w => w.propertyID == ID).ToList()
.RemoveAll(r => !ListOfBadRecords.Any(a => a.anyID == r.propertyID));
Edit:
không chắc chắn mà là nhanh hơn nhưng bạn có thể thực hiện truy vấn thứ 2 với điều này cũng
.RemoveAll(r => !ListOfBadRecords.Select(s=>s.propertyID).Contains(w.propertyID))
Edit2: đừng quên context.SaveChanges();
như tôi đã làm trong bản dự thảo đầu tiên
đây là Cách tôi giải quyết vấn đề:
try
{
List<MaterialPartSerialNumber> list = db.MaterialPartSerialNumbers.Where(s => s.PartId == PartId && s.InventoryLocationId == NewInventoryLocationId && s.LocationId == LocationId).ToList();
db.MaterialPartSerialNumbers.RemoveRange(list);
db.SaveChanges();
}
catch(Exception ex)
{
string error = ex.Message;
}
Trước tiên, bạn có thể tìm thấy danh sách o f các mục bạn muốn xóa.
Sau đó, bạn có thể sử dụng hàm RemoveRange(**list_of_item_to_delete**)
để loại bỏ từng trường hợp trong danh sách hiện có trong cơ sở dữ liệu.
Theo MSDN, phương pháp loại bỏ một loạt các phần tử khỏi Danh sách.
Để biết thêm thông tin, kiểm tra xem nó ở đây https://msdn.microsoft.com/en-us/library/y33yd2b5(v=vs.110).aspx
xin giải thích tại sao nó hoạt động không chỉ đăng mã như câu trả lời –
Đây là những gì tôi đã sử dụng, đầu tiên tạo ra một đối tượng IEnumerable của bảng nơi là các bản ghi phải được loại bỏ được, sau đó chỉ cần sử dụng RemoveRange, và cuối cùng chỉ cần lưu thay đổi cơ sở dữ liệu. Giả sử bạn muốn xóa tất cả các sản phẩm khỏi một ID nhà cung cấp cụ thể trên bảng Sản phẩm, đây là cách bạn có thể làm điều đó.
Sản phẩm IEsToRemove = db.Products.Where (x => x.SupplierId == Supplierid); db.Products.RemoveRange (ProductsToRemove); db.SaveChanges();
- 1. Cách tốt nhất để truy vấn XDocument bằng LINQ?
- 2. Xóa nhiều bản ghi với Khung thực thể bằng cách sử dụng một truy vấn LINQ duy nhất
- 3. Cách tốt nhất để tạo truy vấn LINQ động
- 4. Cách tốt nhất để viết truy vấn trong Entity Framework
- 5. LINQ nhiều nơi truy vấn
- 6. Tư vấn về cách tốt nhất để cấu trúc/định dạng truy vấn LINQ to XML?
- 7. Cách tải Nhiều truy vấn LINQ?
- 8. Xóa nhiều hàng bằng một truy vấn
- 9. Cách tốt nhất để cập nhật trong LINQ to SQL
- 10. C# LINQ truy vấn (MYSQL EF) - Bản ghi riêng biệt và mới nhất
- 11. Thực hiện truy vấn LINQ tốt hơn
- 12. Xóa bản ghi trong bảng nhiều người
- 13. Truy vấn Hibernate cho cùng một bản ghi nhiều lần
- 14. Cách tốt nhất để truy vấn DictField ở MongoEngine
- 15. Cách tốt nhất để phân tích chuỗi truy vấn URL
- 16. Cách tốt hơn để truy vấn phụ
- 17. LINQ truy vấn để phù hợp với nhiều từ
- 18. Truy vấn SQL để xóa các bản ghi cũ hơn hai năm
- 19. Cách tốt nhất để xóa UITextField
- 20. Xây dựng các truy vấn LINQ từ chuỗi trong C# 4.0 - thực hành tốt nhất
- 21. Tạo truy vấn SQL để truy xuất các bản ghi gần đây nhất
- 22. LINQ - tính nhiều điểm trung bình trong một truy vấn
- 23. Làm cách nào để chạy truy vấn cập nhật/xóa hàng loạt trong LINQ?
- 24. Cách tốt nhất để đúc từng mục trong truy vấn LINQ to Entities thành một giao diện là gì?
- 25. truy vấn sql để xóa hồ sơ
- 26. Cách tốt nhất để chèn một số lượng tốt các bản ghi trong hibernate
- 27. Truy vấn trên 1.000.000 bản ghi bằng API Java của Salesforce và tìm cách tiếp cận tốt nhất
- 28. Xóa nhiều bản ghi trong IndexedDB dựa trên chỉ số
- 29. Cách tiếp cận NoSQL tốt nhất để xử lý hơn 100 triệu bản ghi
- 30. Cách chọn bản ghi nếu truy vấn trả về một hàng hoặc chọn không có bản ghi nếu truy vấn trả về nhiều hàng hơn
Nếu bạn cần làm một cái gì đó như 'DELETE FROM table WHERE ...' thì hãy xem xét sử dụng SQL. LINQ có thể không phải là công cụ tốt nhất cho công việc này. – Myster