2017-06-14 35 views
0

我有一個表是這樣的:LINQ到SQL更新中的所有記錄

enter image description here

我想要的東西

像更新所有用戶Seasonal_Voucher柱:UPDATE Users SET Seasonal_Voucher = 'Something'

我想這但它不會工作:

using (DataClassesDataContext context = new DataClassesDataContext()) 
{ 
    Users use = context.Users; 
    { 
     use.Seasonal_Voucher =DropDownList1.SelectedItem.ToString(); 
    }; 
    context.Refresh(0); 
    context.SubmitChanges(); 
} 
+2

定義 「這是行不通的。」編譯錯誤?運行時錯誤?什麼都沒發生? –

+2

你確定這是LINQ to SQL嗎?看起來像實體框架。 – Rob

回答

3

正如薩米在評論中提出的那樣,「這行不通」太廣泛。然而,這裏是你的代碼的基本修改:(因爲你標記的LINQ也,我假設你熟悉lambda語法)

using (DataClassesDataContext context = new DataClassesDataContext()) 
{ 
    foreach (var use in context.Users) 
    { 
     use.Seasonal_Voucher = DropDownList1.SelectedItem.ToString(); 
    }; 
    //context.Refresh(0); 
    //context.SubmitChanges(); 
    context.SaveChanges(); 
} 

我認識(如羅布提到),其加載整個表到內存用於更新是不明智的。因此,你可以簡單地嘗試ExecuteSqlCommand方法(因爲它看起來像你使用實體框架)。 MSDN:Database.ExecuteSqlCommand Method

它對批量更新很有用。

string sqlQuery = "UPDATE Users SET Seasonal_Voucher = '" + DropDownList1.SelectedItem.ToString() + "'"; 
using (DataClassesDataContext context = new DataClassesDataContext()) 
{ 
    context.Database.ExecuteSqlCommand(sqlQuery); 
} 
+2

問題標題明確表示他們想要更新*所有*記錄。因此,哪裏是不需要的。並且將整個表格加載到內存中並不理想,當你真的想要做的是批量更新 – Rob

+1

@Rob你是對的,我用更好的方法編輯了我的答案,作爲替代方案。 –

+0

感謝Keyur PATEL並感謝Rob –

1
參照 how to update the multiple rows at a time using linq to sql? 下面代碼

可選地不相同。然而,正如Keyur所提到的那樣,整個表格將被加載用於更新操作,這將是性能瓶頸。

using (DataClassesDataContext context = new DataClassesDataContext()) 
{ 
    var users= context.Users.ToList(); 
    users.ForEach(user=>user.Seasonal_Voucher=DropDownList1.SelectedItem.ToString()); 
    context.SaveChanges(); 

} 

using (DataClassesDataContext context = new DataClassesDataContext()) 
{ 
    context.Users.ToList().ForEach(user=>user.Seasonal_Voucher=DropDownList1.SelectedItem.ToString()); 
    context.SaveChanges(); 
}