【问题标题】:Trying to update a DataRow in C# with LINQ尝试使用 LINQ 在 C# 中更新 DataRow
【发布时间】:2012-04-02 02:00:12
【问题描述】:

我正在尝试在 DataTable 中查找并更新特定的 DataRow。我根据我的搜索尝试了一些东西,下面的代码似乎是我能得到的最接近的。 linq 将返回一行。对于该行,我想更新列值(状态、停止时间、持续时间)。我一生都找不到如何做到这一点。我尝试过强制转换,但我是 linq 的新手,不知道如何更新这些值。

private DataTable downloadProcStatusTable;

void UpdateDataDownloadProcedureList(ProcedureStats ProcStats)          
{
      var currentStatRow = from currentStat in downloadProcStatusTable.AsEnumerable()
                           where currentStat.Field<String>("ProcedureName") == ProcStats.ProcName
                           select currentStat;
}

【问题讨论】:

    标签: c# linq c#-4.0


    【解决方案1】:

    您的查询实际上给您一个IEnumerable&lt;DataRow&gt;。你需要这样做才能得到实际的行:

      var currentStatRow = (from currentStat in downloadProcStatusTable.AsEnumerable()
                           where currentStat.Field<String>("ProcedureName") == ProcStats.ProcName 
                           select currentStat).SingleOrDefault(); 
    

    然后您应该能够使用currentStatRow 变量来修改列值。

    【讨论】:

      【解决方案2】:

      大纲

      1. 从数据库中加载现有实体(除非您有一个可以重新附加的实体,在这种情况下您可以避免这个额外的查询)
      2. 根据需要更新属性
      3. 使用SubmitChanges()将更改提交回数据库

      实施

      我不确定你的变量在哪里以及名称,但这应该会给你一个好的开始......

      void UpdateDataDownloadProcedureList(ProcedureStats ProcStats)          
          {
                var currentStatRow = (from currentStat in downloadProcStatusTable.AsEnumerable()
                                     where currentStat.Field<String>("ProcedureName") == ProcStats.ProcName
                                     select currentStat).FirstOrDefault();
      
               currentStatRow.Status = ProcStats.Status;
               currentStatRow.StopTime = ProcStats.StopTime;
               currentStatRow.Duration = ProcStats.Duration;
      
               downloadProcStatusTable.SubmitChanges();
          }
      

      【讨论】:

        猜你喜欢
        • 2011-12-05
        • 2012-09-28
        • 2012-04-06
        • 2018-05-29
        • 1970-01-01
        • 2010-12-02
        • 2012-02-06
        • 2020-03-04
        • 1970-01-01
        相关资源
        最近更新 更多