如何使用linq to sql一次更新多行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用linq to 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
。我们想更新name
和status
匹配的friendid
和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();
}
。以下是一些语法选项:
选项1
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>
{
a.status=true;
a.name=name;
}
);
db.SubmitChanges();
}
选项2
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();
}
选项3
db.SubmitChanges();
更新2
在答案中我使用LINQ to SQL,在这种情况下提交到数据库的用法是:
db.SaveChanges()
但是对于Entity Framework提交更改,它是:
ToList()
不要在接受的答案中使用ToList()
方法!
运行SQL分析器,我验证并发现string query = "Update YourTable Set ... Where ...";
context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));
函数从数据库中获取所有记录。这真是糟糕的表现!!
我会通过pure sql命令运行此查询,如下所示:
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();
}
这将在一次性操作中进行更新而不选择甚至一行。
这就是我做的:
IF:
qazxswpoi
希望帮助某人。
以上是关于如何使用linq to sql一次更新多行?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 LINQ to SQL 创建通用数据访问对象 (DAO) CRUD 方法