在LINQ中更新一组记录 - 一次全部

时间:2014-09-10 16:21:59

标签: linq entity-framework linq-to-entities

我有几条记录都需要更新为相同的值。如果我只是使用ADO.NET,我可以调用一个存储过程来更新它们...

UPDATE myTable
SET myColumn = "XXXXXX"
WHERE filterColumn == 'YYY'

但是因为我正在使用实体框架,我想知道它们是否是一种类似的方式来同时更新一组记录而不必循环遍历每个值并单独设置它们?目前我正在使用..

from s in myTables
where s.filterColumn == 'YYY'
select s;

var results = s.ToList();

foreach (i in results){
  s.myColumn = "XXXXXX"
}

有没有办法像SQL一样设置所有值?

我正在使用Entity Framework v6.1

2 个答案:

答案 0 :(得分:3)

使用Entity Framework时,您仍然可以执行sql命令。这是怎么做的。

dbContext.Database.Connection.Open();
var cmd = dbContext.Database.Connection.CreateCommand();

cmd.CommandText = @"UPDATE myTable
SET myColumn = @myColumn
WHERE filterColumn = @filterColumn";

cmd.Parameters.Add(new SqlParameter("myColumn", "XXXXXX"));
cmd.Parameters.Add(new SqlParameter("filterColumn", "YYY"));
cmd.ExecuteNonQuery();

答案 1 :(得分:2)

实体框架扩展库包括批量更新/删除功能:
https://github.com/loresoft/EntityFramework.Extended

myTables.Update(
    s => s.filterColumn == "YYY",
    s => s.myColumn = "XXXXXX");

NB:目前只支持SQL Server和SQL CE,但有a pull request to add MySQL support