我正在寻找在修改数据表时的最佳做法。
我正在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
答案 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;
}