有没有办法用LINQ对集合进行批量更新?目前,如果我有一个List<myObject>并且我想将列1更新为等于列中每一行的TEST,我将设置一个foreach循环,然后对于每个单独的对象,我将设置该值,然后保存它.这工作正常,但我只是想知道是否有一些LINQ方法在那里我可以做类似的事情myOject.BulkUpdate(columnName, value)?
Pet*_*eed 11
这里的要求完全可以使用Linq表达式和Terry Aney关于此主题的优秀图书馆.
您给出的示例中的更新如下:
using BTR.Core.Linq;
...
Context.myObjects.UpdateBatch
(
Context.myObjects.Where(x => x.columnName != value),
x => new myObject { columnName = value}
);
Run Code Online (Sandbox Code Playgroud)
编辑(2017-01-20):现在以NuGet包@ https://www.nuget.org/packages/LinqPost/的形式提供它是值得的.
Install-Package LinqPost
Run Code Online (Sandbox Code Playgroud)
听起来你正在使用LINQ To SQL,而且你已经掌握了基础知识.
LINQ To SQL是关于将表抽象为类,并不真正提供您正在寻找的"银弹"或单线程.
实现这一目标的唯一方法是实现您的单行程序,使存储过程获取该列名和新值,并自己实现该逻辑.
db.MassUpdateTableColumn("Customer", "Name", "TEST");
....
Run Code Online (Sandbox Code Playgroud)
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. */
Run Code Online (Sandbox Code Playgroud)
否则,就像你描述的那样:
List<Customer> myCusts = db.Customers.ToList();
foreach(Customer c in myCusts)
{
c.Name = "TEST";
}
db.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)