我有以下代码:
foreach (XNode rowXml in elements.Nodes())
{
foreach (DataRow rowDB in dataSetDB.Tables[0].Rows)
{
string itemDB = rowDB[0].ToString().ToUpper();
string itemXml = rowXml.ToString().ToUpper();
if (itemDB == itemXml)
{
//If itemDB == itemXml; jump to Outer_Foreach
}
if (itemDB != itemXml)
{
//If itemDB != itemXml; jump to Outer_Foreach
}
}
如何摆脱Inner-Foreach和Out-Foreach,并且仍然将两个foreach放在离开它的地方。我循环遍历DB和XML表行。打破;完成跳出Inner-Foreach并且我无法抓住我离开它的地方,所以当我一遍又一遍地遍历它时,我开始回到索引[0]。
答案 0 :(得分:1)
听起来你需要'for'循环。
int i = 0;
int k = 0;
bool shouldBreak;
var nodes = elements.Nodes();
var rows = dataSetDB.Tables[0].Rows;
for (i = 0; i < nodes.Count(); i++)
{
for(k = 0; k < rows.Count(); k++)
{
string itemDB = rows[k][0].ToString().ToUpper();
string itemXml = nodes[i].ToString().ToUpper();
if (itemDB == itemXml)
{
shouldBreak = true;
break;
}
if (itemDB != itemXml)
{
shouldBreak = true;
break;
}
}
if (toBreak)
break;
}
现在,如果你打破内循环,可以通过访问i和k
来了解它的中断位置答案 1 :(得分:0)
这个答案是stolen from this answer here。你想要实现的是拉链操作。有关更多信息,请参阅我链接的答案。
var xmlNodes = elements.Nodes();
var dbNodes = dataSetDB.Tables[0].Rows;
var xmlAndDB = xmlNodes.Zip(dbNodes , (x, d) => new { xNode = x, dNode = d });
foreach(var xd in xmlAndDB )
{
Console.WriteLine(xd.xNode + xd.dNode);
string itemDB = xd.dNode[0].ToString().ToUpper();
string itemXml = xd.xNode.ToString().ToUpper();
if (itemDB == itemXml)
{
//If itemDB == itemXml;
}
else /* if (itemDB != itemXml) */
{
//If itemDB != itemXml;
}
}