Para actualizar una columna, aquí hay algunas opciones de sintaxis:
Opción 1
var ls=new int[]{2,3,4};
using (var db=new SomeDatabaseContext())
{
var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
some.ForEach(a=>a.status=true);
db.SubmitChanges();
}
opcion 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>a.status=true);
db.SubmitChanges();
}
Opción 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
}
db.SubmitChanges();
}
Actualizar
Como se solicita en el comentario, podría tener sentido mostrar cómo actualizar varias columnas. Entonces, digamos, a los efectos de este ejercicio, que no solo queremos actualizar las statusen. Queremos actualizar namey statusdónde friendidcoincide. Aquí hay algunas opciones de sintaxis para eso:
Opción 1
var ls=new int[]{2,3,4};
var name="Foo";
using (var db=new SomeDatabaseContext())
{
var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
some.ForEach(a=>
{
a.status=true;
a.name=name;
}
);
db.SubmitChanges();
}
opcion 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>
{
a.status=true;
a.name=name;
}
);
db.SubmitChanges();
}
Opción 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
some.name=name;
}
db.SubmitChanges();
}
Actualización 2
En la respuesta, estaba usando LINQ to SQL y, en ese caso, para comprometerme con la base de datos, el uso es:
db.SubmitChanges();
Pero para que Entity Framework confirme los cambios es:
db.SaveChanges()
records.ForEach(x=> { x.Deleted = true; x.DeletedByUserID = deletedByUserId; x.DeletedOn = DateTime.Now; });db.SaveChanges()y nodb.SubmitChanges()?ToList()? Es un asesino¡No use el
ToList()método como en la respuesta aceptada!Al ejecutar SQL Profiler, verifiqué y encontré que la
ToList()función obtiene todos los registros de la base de datos. ¡Es una actuación realmente mala!Habría ejecutado esta consulta mediante el comando sql puro de la siguiente manera:
Esto operaría la actualización de una sola vez sin seleccionar ni una fila.
fuente
Esto es lo que hice:
EF:
La esperanza ayuda a alguien.
fuente
featurey tampoco debe agregarlocontext.SaveChanges()dentroforeach, debe estar fuera de cada bucle.