如何更新多行使用LINQ到SQL?
表:
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
如果用户发送userid = 1,那么friendids = 2,4,5 status = true
请告诉我如何更新以上所有friendids状态的查询是真实的。 [2,3,4一次]。
谢谢
要更新一个列,这里有一些语法选项:
选项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(); }
选项2
using (var db=new SomeDatabaseContext()) { db.SomeTable .Where(x=>ls.Contains(x.friendid)) .ToList() .ForEach(a=>a.status=true); db.SubmitChanges(); }
选项3
using (var db=new SomeDatabaseContext()) { foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList()) { some.status=true; } db.SubmitChanges(); }
更新
根据评论的要求,可能有意义的是展示如何更新多列。 所以我们说为了这个练习的目的,我们不仅要更新status
。 我们要更新friendid
匹配的name
和status
。 这里有一些语法选项:
选项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(); }
选项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(); }
选项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(); }
更新2
在答案我使用LINQ to SQL,在这种情况下提交到数据库的用法是:
db.SubmitChanges();
但是对于Entity Framework提交更改是:
db.SaveChanges()
不要在接受的答案中使用ToList()
方法!
运行SQL分析器,我validation并发现ToList()
函数从数据库中获取所有logging。 这是非常糟糕的performance!
我将通过如下的纯sql命令运行这个查询:
string query = "Update YourTable Set ... Where ..."; context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));
这将以一次性操作更新而不select一行。
这我,我做了什么:
从SQL:
update Shop set Order=5 where ShopID=123 and Type=12
对于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(); } }
需要一些时间来更新,如果更多的行应该更新,欣赏是否有人可以改善这一点。
希望有助于某人。