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