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
如果用户发送用户ID = 1,friendids = 2,4,5状态=真
请告诉我要如何更新所有friendids状态为真上面的查询。 [每次2,3,4次]。
感谢
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
如果用户发送用户ID = 1,friendids = 2,4,5状态=真
请告诉我要如何更新所有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()
这是我做过什么:
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();
}
希望可以帮助别人。
工程就像一个魅力! – 2017-07-28 07:27:54
这是不好的,你每次调用数据库来获取记录'feature',并且你不应该在'foreach'里面加上'context.SaveChanges()'它应该在foreach循环之外。 – 2017-11-03 09:43:40
SQL与EF代码不同。在SQL中,只有一条命令在所有行上运行并更新表。 EF代码首先获取所有行,更新DB上更改的行,这意味着如果您有1000个更新行,它将执行1000次sql更新 – 2018-01-15 11:24:12
不要在接受的答案中使用ToList()
方法!
运行SQL事件探查器,我验证并发现ToList()
函数获取数据库中的所有记录。这是非常糟糕的表现!
string query = "Update YourTable Set ... Where ...";
context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));
这将在操作一次性更新,而不选择连一行:
如下,我会运行通过纯SQL命令该查询。
以及对多种意见,你需要做的:'records.ForEach(X => {x.Deleted = TRUE; x.DeletedByUserID = deletedByUserId; x.DeletedOn = DateTime.Now; });' – JonH 2014-09-12 11:35:21
@ Jonh与OP有关的问题有什么关系? – Arion 2014-09-12 18:13:42
Arion简单的答案...有人谷歌如何做到这一点,这个答案是谷歌顶部。答案是正确的,但是Google使用者想要为多个列执行此操作,而不仅仅是一个。我的评论填补了缺失的一块,没有更多的只是一个... ... – JonH 2014-09-12 21:34:05