【问题标题】:linq to sql update mulitple rowslinq to sql 更新多行
【发布时间】:2012-02-21 20:57:16
【问题描述】:

我正在尝试使用 linq to sql 更新 sql 表:

使用 Linq to SQL 查询数据库 我能够将数据加载到 WPF 应用程序的 UI 中的 gridview 中。所以我有一个与每一行关联的复选框。该表将 EmpName 和 Ability 作为两列。因此,当用户选中与行/行关联的复选框时,我必须将表中的值更新回 sql DB 中。

这是我选中的复选框的代码:

    private void EmployeeName_Checked(object sender, RoutedEventArgs e)
    {
      DataDataContext dc = new DataDataContext();

        foreach (var item in empListView.SelectedItems)
        {


        EmpList updateList  = (from p in dc. EmpList
                                          where p.able == No
                                          select p).FirstOrDefault();


            if(updateList.able==NO)
            updateList.able = YES;

        }

        dc.SubmitChanges();
        empListView.ItemsSource = dc.EmpLists.ToList();
    }

这里的EmpList 是我从设计器添加linqtosql 类时创建的。所以我正在尝试更新同一个列表,然后将更改提交到数据库。

问题:我可以根据gridview 中选中的复选框来选择行,并且我可以遍历选中的项目,但是我无法更新所有选中的行......只有少数正在更新......如果有人可以查看代码并在查询有任何问题时指导我,我会很高兴。

最终,我必须根据gridview的colum Ability中的当前值更新所有选择的行。

【问题讨论】:

  • 您的示例代码无法编译。我仍然猜想您的问题是您在每次迭代时都覆盖了数据上下文。因此,您的保存调用仅作用于最后一个。
  • @cadrell0 Yes 和 No 是来自数据库的位值。
  • @usr 此外,对dc.SubmitChanges() 的调用发生在与声明变量的范围不同的范围内。此时它应该超出范围并且不可用。
  • cadrell0,这就是我所说的“不会编译”。我认为这个问题是以一种粗心的方式发布的。

标签: c# wpf linq-to-sql


【解决方案1】:

这是一篇关于使用 LINQ to SQL 进行批量更新和删除的好文章 http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx

也许这会给你一个想法或指针......

【讨论】:

    【解决方案2】:

    DataDataContext dc = new DataDataContext();需要移到 foreach 循环之外。目前它不应该编译,因为它超出了范围。我不明白您如何将所选项目链接到您从数据集中提取的项目,您只是在拉第一个?您的商品是否有 ID 或可以抓取的东西?

    【讨论】:

    • 由于您计划在函数末尾获取所有 EmpList,您不妨在执行 foreach 循环之前获取它。这意味着只从数据库中提取一次,并且仍然允许您更新它们。在您的 linq 查询中,从您保存的列表中选择,然后找到 item.ID == p.ID && p.able == NO 的位置​​。这将确保您实际上抓住了选定的一个,而不仅仅是随机的第一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多