2017-06-14 38 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(); 
}