Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql 使用LINQ到SQL的批量更新_Linq To Sql - Fatal编程技术网

Linq to sql 使用LINQ到SQL的批量更新

Linq to sql 使用LINQ到SQL的批量更新,linq-to-sql,Linq To Sql,有没有办法使用LINQ对集合进行批量更新?当前,如果我有一个列表,并且我想更新column1以对列表中的每一行进行相等测试,我会设置一个foreach循环,然后对每个单独的对象设置值,然后保存它。这很好,但我只是想知道是否有一些LINQ方法,我可以在那里执行类似于myObject.BulkUpdate(columnName,value)?的操作,听起来像是在使用LINQtoSQL,而且您已经准备好了基础知识 LINQtoSQL是关于将表抽象为类的,并没有真正提供您想要的“银弹”或一行代码 要做到

有没有办法使用LINQ对集合进行批量更新?当前,如果我有一个
列表
,并且我想更新column1以对列表中的每一行进行相等测试,我会设置一个foreach循环,然后对每个单独的对象设置值,然后保存它。这很好,但我只是想知道是否有一些LINQ方法,我可以在那里执行类似于
myObject.BulkUpdate(columnName,value)

的操作,听起来像是在使用LINQtoSQL,而且您已经准备好了基础知识

LINQtoSQL是关于将表抽象为类的,并没有真正提供您想要的“银弹”或一行代码

要做到这一点,唯一的方法是实现一行程序,即创建一个存储过程来获取该列名和新值,然后自己实现该逻辑

 db.MassUpdateTableColumn("Customer", "Name", "TEST");

 ....
否则,正如您所描述的:

 List<Customer> myCusts = db.Customers.ToList();
 foreach(Customer c in myCusts)
 {
     c.Name = "TEST";
 }     
 db.SubmitChanges();
List myCusts=db.Customers.ToList();
foreach(myCusts中的客户c)
{
c、 Name=“测试”;
}     
db.SubmitChanges();
LINQ to SQL(或EF)就是将对象放入内存,对它们进行操作,然后对每一行使用单独的数据库请求更新它们


在不需要在客户机上水合整个对象的情况下,最好使用服务器端操作(存储过程、TSQL)而不是LINQ。您可以使用LINQ提供程序对数据库发出TSQL。例如,使用LINQ to SQL,您可以使用context.ExecuteCommand(“更新表集字段=条件所在的值”),只需注意。

使用LINQ表达式和Terry Aney关于此主题的优秀库,您在这里的需求是完全可能的

您给出的示例的更新如下:

using BTR.Core.Linq;
...

Context.myObjects.UpdateBatch
(
    Context.myObjects.Where(x => x.columnName != value),
    x => new myObject { columnName = value}
);

编辑(2017-01-20):它毫无价值,现在以NuGet软件包的形式提供


你说的是LINQ到SQL吗?我总是使用存储过程来使用XML作为批量数据进行批量更新,但我想知道在LINQ中是否可行。是的,我知道如何做到这一点。我的问题只是问是否有更精简的LINQ函数。对于避免RBAR,第一个答案并不正确。
using BTR.Core.Linq;
...

Context.myObjects.UpdateBatch
(
    Context.myObjects.Where(x => x.columnName != value),
    x => new myObject { columnName = value}
);
Install-Package LinqPost