使用c#从datarow的中间继续数据表迭代



我有一个数据表的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 ...
}

最新更新