在foreach C#中更新数据表中的行

时间:2018-10-31 22:54:07

标签: c# datatable

我正在寻找在修改数据表时的最佳做法。

我正在datatables序列行号列中获取最大值。在此示例中为25。我在此数据表中有很多零,我将一个接一个地找到它们并将其更改为25 + 1、26 + 1、27 + 1等。我想知道是执行此操作的最佳实践,而无需在编辑行的值时创建另一个表并构建新表。

int maxSequenceNumber = Convert.ToInt32(dtNewOrderGuide.Compute("max([seqlinnum])", string.Empty));

foreach(DataRow row in dtNewOrderGuide.Rows)
{
    if (row["seqlinnum"].ToString() == "0")
    {
    }
}

我的桌子的例子

RowNumber   | seqlinnum
1           |     1
2           |     10
3           |     15
4           |     25
5           |     0
6           |     0
7           |     0
8           |     0
9           |     0
10          |     0

2 个答案:

答案 0 :(得分:2)

作为替代方案,在foreach上使用传统的for循环将意味着不执行任何数据复制或任何操作,并且可能会更快地通过数据表运行

for(int i=0;i<table.Rows.Count;i++)
{ 
   if (table.Rows[i]["seqlinnum"].ToString() == "0")
   {
     table.Rows[i]["seqlinnum"]=maxSequenceNumber; maxSequenceNumber++;
   }
}

答案 1 :(得分:1)

您可以使用Linq进行此操作...如果您不想冒险覆盖序列,可能想在选择之前使用一个顺序。

var query = td.Rows.Cast<DataRow>().Select((r,i)=>new {r,i});
foreach (var row in query)
{
    row.r[“seqlinnum”]=row.i;
}