如何使用 LINQ to SQL 一次更新多行
本文关键字:一次 更新 LINQ 何使用 to SQL | 更新日期: 2023-09-27 18:32:16
Table:
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
匹配的位置。下面是一些语法选项:
选项 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();
但是对于实体框架提交更改,它是:
db.SaveChanges()
不要使用接受答案中的ToList()
方法!
运行SQL探查器,我验证并发现ToList()
函数从数据库中获取所有记录。这真的是糟糕的表现!!
我将通过纯sql命令运行此查询,如下所示:
string query = "Update YourTable Set ... Where ...";
context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));
这将一次性操作更新,甚至不选择一行。
这是我所做的:
英 孚:
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();
}
希望帮助某人。
注意:5年后,正如评论中所说,这不是一个好的选择,因为我正在进行数据库调用以获取foreach
内部的一些数据。如果您不这样做,则可以使用。