我有一个数据表的100或200+行(作为例子考虑100行)与3列。第一列是Serial Number。迭代数据表直到第二列值"resources";并在每次迭代验证后退出数据表。再次需要从迭代退出的位置开始数据表迭代,即在"资源"之后的总数据行的中间位置。列。数据表的数据也可以超过100行或200行。
bool status=false; int rownumber=0;
foreach (DataRow row in datatable.Rows)
{
if (status)
{
rownumber = datatable.Rows.IndexOf(row);
break;
}
foreach (DataColumn col in datatable.Columns)
{
// Validation Logic
if (row[col.ColumnName].ToString().Contains("Resources")) // This row is dynamic. As example considered 50th row.
status = true;
}
}
// How to start iteration of datarow with same above datatable from ColumnName: "Resources" at 51st row onwards?
// Below code is failing. System.Data.EvaluateException: 'Filter expression '51' does not evaluate to a Boolean term.'
string selectedRow = datatable.Rows[rownumber][0].ToString();
status=false;
foreach (DataRow r in datatable.Select(selectedRow))
{
if (status)
{
rownumber = datatable.Rows.IndexOf(r);
break;
}
foreach (DataColumn col in datatable.Columns)
{
// Next Validation Logic
if (r[col.ColumnName].ToString().Contains("Resources"))
status = true;
}
}
如果你需要为你的逻辑使用行索引,那么你可以切换到一个简单的for…循环而不是foreach。
bool status=false;
int rownumber=0;
for(int x = 0; x < datatable.Rows.Count; x++)
{
DataRow row = datatable.Rows[x];
if (status)
{
rownumber = x;
break;
}
foreach (DataColumn col in datatable.Columns)
{
// Validation Logic
if (row[col.ColumnName].ToString().Contains("Resources"))
status = true;
}
}
然后
status=false;
rownumber++; // start from the next row if any
for(int x = rownumber; x < datatable.Rows.Count; x++)
{
DataRow row = datatable.Rows[x];
.... second loop logic ...
}