如何更新多行使用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匹配的namestatus 。 这里有一些语法选项:

选项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(); } } 

需要一些时间来更新,如果更多的行应该更新,欣赏是否有人可以改善这一点。

希望有助于某人。