LINQ to SQL更新所有记录

时间:2017-06-14 03:45:34

标签: c# sql linq

我有一张这样的表:

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 个答案:

答案 0 :(得分: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();
}

我意识到(正如Rob提到的那样)将整个表加载到内存中进行更新是不明智的。因此,您可以简单地尝试ExecuteSqlCommand方法(因为看起来您仍在使用实体框架)。 MSDN:Database.ExecuteSqlCommand Method

对批量更新很有用。

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

答案 1 :(得分: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();   
}