update net mvc lista con asp actualizar c# linq entity-framework linq-to-sql

net - update linq c# mvc



cómo actualizar las múltiples filas a la vez usando linq a sql? (3)

Mesa:

id userid friendid name status 1 1 2 venkat false 2 1 3 sai true 3 1 4 arun false 4 1 5 arjun false

si el usuario envía userid = 1, friendids = 2,4,5 status = true

por favor dime que la consulta de cómo actualizar el estado anterior de todos los amigos es verdadera. [2,3,4 a la vez].?

Gracias


Esto es lo que hice:

EF:

using (var context = new SomeDBContext()) { foreach (var item in model.ShopItems) // ShopItems is a posted list with values { var feature = context.Shop.Where(h => h.ShopID == 123 && h.Type == item.Type).ToList(); feature.ForEach(a => a.SortOrder = item.SortOrder); } context.SaveChanges(); }

Hope ayuda a alguien


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

Tal como se solicitó en el comentario, podría tener sentido mostrar cómo actualizar varias columnas. Entonces, para el propósito de este ejercicio, queremos no solo actualizar el status en unos. Queremos actualizar el name y el status donde se encuentra el friendid . 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 que estaba usando LINQ to SQL y en ese caso para comprometerse con la base de datos, el uso es:

db.SubmitChanges();

Pero para Entity Framework para comprometer los cambios es:

db.SaveChanges()


¡No use el método ToList() como en la respuesta aceptada!

Al ejecutar SQL profiler, verifiqué y encontré que la función ToList() obtiene todos los registros de la base de datos. ¡Es realmente un mal rendimiento!

Hubiera ejecutado esta consulta mediante el comando sql puro de la siguiente manera:

string query = "Update YourTable Set ... Where ..."; context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));

Esto operaría la actualización de una sola vez sin seleccionar ni siquiera una fila.