【问题标题】:LINQ to SQL update all recordsLINQ to SQL 更新所有记录
【发布时间】:2017-06-14 03:45:34
【问题描述】:

我有一张这样的桌子:

我想为所有用户更新 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();
}

【问题讨论】:

  • 定义“它不起作用”。编译错误?运行时错误?什么都没发生?
  • 你确定这是 LINQ to SQL 吗?看起来像实体框架。

标签: c# sql linq


【解决方案1】:

正如 Sami 在 cmets 中所建议的那样,“它行不通”太宽泛了。但是,这是对您的代码的基本修改:(由于您也标记了 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);
}

【讨论】:

  • 问题标题明确表示他们要更新所有记录。因此,不需要 where 。当您真正尝试做的是批量更新时,将整个表加载到内存中并不理想
  • @Rob 你说得对,我已经用更好的方法编辑了我的答案。
【解决方案2】:

或者参考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();   
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多