Có cách nào để cập nhật hàng loạt trên bộ sưu tập với LINQ không? Hiện tại nếu tôi có List<myObject>
và tôi muốn cập nhật cột1 thành TEST bằng nhau cho mỗi hàng trong Danh sách tôi sẽ thiết lập vòng lặp foreach và sau đó cho mỗi đối tượng riêng lẻ, tôi sẽ đặt giá trị và sau đó lưu nó. Điều này hoạt động tốt nhưng tôi đã chỉ tự hỏi nếu có một số phương pháp LINQ ra có nơi tôi có thể làm một cái gì đó như myOject.BulkUpdate(columnName, value)
?Cập nhật hàng loạt với LINQ to SQL
Trả lời
Có vẻ như bạn đang sử dụng LINQ to SQL và bạn đã có những điều cơ bản đã được trình bày.
LINQ to SQL là về trừu tượng hóa bảng thành các lớp và không thực sự cung cấp 'dấu đầu dòng bạc' hoặc một lớp lót mà bạn đang tìm kiếm.
Cách duy nhất để làm điều đó là để đạt được một lớp lót của bạn sẽ làm cho một proc được lưu trữ để có tên cột và giá trị mới, và thực hiện logic đó cho mình.
db.MassUpdateTableColumn("Customer", "Name", "TEST");
....
CREATE PROC MassUpdateTableColumn
@TableName varchar(100), @ColumnName varchar(100), @NewVal varchar(100)
AS
/*your dynamic SQL to update a table column with a new val. */
Nếu không, nó như bạn mô tả:
List<Customer> myCusts = db.Customers.ToList();
foreach(Customer c in myCusts)
{
c.Name = "TEST";
}
db.SubmitChanges();
Có, tôi hiểu cách thực hiện điều này. Câu hỏi của tôi là chỉ hỏi nếu có một hàm LINQ được sắp xếp hợp lý hơn. – esastincy
LINQ to SQL (hoặc EF cho rằng vấn đề), là tất cả về việc đưa đối tượng vào bộ nhớ, thao túng họ, và sau đó cập nhật chúng với các yêu cầu cơ sở dữ liệu riêng biệt cho mỗi hàng.
Trong trường hợp bạn không cần phải hydrate toàn bộ đối tượng trên máy khách, tốt hơn hết là nên sử dụng các thao tác bên máy chủ (procs được lưu trữ, TSQL) thay vì LINQ. Bạn có thể sử dụng các nhà cung cấp LINQ để phát hành TSQL dựa vào cơ sở dữ liệu. Ví dụ: với LINQ to SQL, bạn có thể sử dụng context.ExecuteCommand ("Cập nhật trường bảng thiết lập = giá trị ở điều kiện"), chỉ xem ra cho SQL Injection.
Yêu cầu của bạn ở đây hoàn toàn có thể sử dụng biểu thức LINQ và thư viện tuyệt vời của Terry Aney về chủ đề này.
Batch Updates and Deletes with LINQ to SQL
Bản cập nhật trong các điều khoản của ví dụ bạn đưa ra sẽ như sau:
using BTR.Core.Linq;
...
Context.myObjects.UpdateBatch
(
Context.myObjects.Where(x => x.columnName != value),
x => new myObject { columnName = value}
);
Chỉnh sửa (2017/01/20): Nó có giá trị gì này hiện đang có sẵn dưới hình thức gói NuGet @https://www.nuget.org/packages/LinqPost/.
Install-Package LinqPost
Được thăng hạng để tránh RBAR, câu trả lời đầu tiên không thực sự chính xác. – Jasmine
- 1. Cập nhật bằng LINQ to SQL
- 2. Cách chèn hàng loạt - LINQ to Entities
- 3. Cập nhật nhiều hàng LINQ vs SQL
- 4. Cập nhật hàng loạt với Mongoose
- 5. Cách tốt nhất để cập nhật trong LINQ to SQL
- 6. Cập nhật một cột trong LINQ to SQL
- 7. LINQ to SQL - cập nhật các bản ghi
- 8. Cập nhật hàng loạt/cập nhật hàng loạt JPA Hibernate trong Spring MVC
- 9. Chèn/cập nhật hàng loạt bằng Mongoid?
- 10. Chèn hoặc cập nhật hàng loạt NHibernate
- 11. Cập nhật hàng loạt trong NHibernate
- 12. Cập nhật hàng loạt Dynamics CRM 2011
- 13. Cập nhật hàng loạt/upsert trong MongoDB?
- 14. Cập nhật hàng loạt/xóa EF5
- 15. Làm thế nào để thực hiện cập nhật hàng loạt?
- 16. NOLOCK với LINQ to SQL
- 17. LINQ to SQL hoặc LINQ to DataSet?
- 18. Chèn/cập nhật hàng loạt máy chủ Sql so với MERGE trong trường hợp chèn hoặc cập nhật
- 19. LINQ to SQL với SQL Azure
- 20. Làm cách nào để chạy truy vấn cập nhật/xóa hàng loạt trong LINQ?
- 21. Cập nhật hàng loạt trong Google App Engine Datastore
- 22. Cập nhật bản ghi bằng cách sử dụng LINQ-to-SQL
- 23. SQL to LINQ Tool
- 24. Insert/Chọn với LINQ-To-SQL
- 25. Cập nhật bằng CTE và số hàng làm truy vấn cập nhật TSQL hoặc hàng loạt với ROW_NUMBER()
- 26. chèn số lượng lớn với LINQ-to-sql
- 27. Xóa các hàng trong một bảng bằng LINQ to SQL
- 28. LINQ to SQL Mỗi hàng thứ N từ bảng
- 29. Linq-to-Sql SubmitChanges không cập nhật các trường ... tại sao?
- 30. LINQ to SQL: cách cập nhật trường duy nhất mà không lấy toàn bộ thực thể
Bạn đang nói về LINQ-To-SQL? –
Tôi luôn hoàn nguyên các thủ tục được lưu trữ để thực hiện cập nhật hàng loạt bằng cách sử dụng XML làm dữ liệu hàng loạt, nhưng muốn biết liệu có thể thực hiện trong LINQ hay không. –