2012-04-02 51 views
0

我試圖找到,然後更新DataTable中的特定DataRow。我根據我的搜索嘗試了一些東西,下面的代碼似乎是我能得到的最接近的。 linq將返回一行。用那一行,我想更新列值(狀態,停止時間,持續時間)。我不能爲我的生活找到如何做到這一點..我試過鑄造,但我是新來的linq,並沒有看到如何更新這些值。試圖用LINQ更新C#中的DataRow

private DataTable downloadProcStatusTable; 

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

回答

2

您的查詢,因爲它實際上代表給你一個IEnumerable<DataRow>。你需要這樣做,以獲得實際行:

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

然後,您應該能夠使用currentStatRow變量修改列值。

+0

謝謝,我都準備好了。 – StatsViaCsh 2012-04-02 02:27:41

1

大綱

  1. 負載從數據庫中現有的實體(除非你有一個,你可以重新連接,在這種情況下,你可能會避免這種額外的查詢)
  2. 更新的屬性需要
  3. 提交更改回使用SubmitChanges()

Implem數據庫entation

我不完全確定您的變量和名字,但是這應該給你一個良好的開端...

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

謝謝,currentStatRow [「Status」] = ProcStats.Status;是工作代碼.. – StatsViaCsh 2012-04-02 02:35:40