正在尝试用LINQ更新C#中的DataRow

本文关键字:更新 中的 DataRow LINQ | 更新日期: 2023-09-27 18:29:52

我试图在DataTable中查找并更新特定的DataRow。根据我的搜索,我尝试了一些东西,下面的代码似乎是我能得到的最接近的。linq将返回一行。对于该行,我想更新列值(Status、StopTime、Duration)。我一辈子都找不到该怎么做。。我试过选角,但我是linq的新手,不知道如何更新这些值。

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

正在尝试用LINQ更新C#中的DataRow

当前的查询实际上会给您一个IEnumerable<DataRow>。你需要这样做才能得到实际的行:

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

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

大纲

  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();
    }