如何比较DataTables中的字符串和子字符串?

时间:2018-08-10 07:57:58

标签: c#

我有一个包含1列的DataTable和一个分别包含2列的DataTables列表。

我想逐行比较DataTable的值和List中每个DataTable的值的前6位。

这是我的代码:

for(int fs = 0; fs < dataTable.Rows.Count; fs++)
{
    for(int fs2 = 0; fs < dataTableList.Count; fs2++)
    {
        for(int fs3 = 0; fs3 < dataTableList[fs2].Rows.Count; fs3++)
        {
            if(dataTable.Rows[fs]["columnName"].ToString().Equals(dataTableList[fs2].Rows[fs3]["otherColumnName"].ToString().Substring(0,6)))
            {
                //do sth.
            }
        }
    }
}

程序到达if(dataTable.Rows[fs]["columnName"].ToString().Equals(dataTableList[fs2].Rows[fs3]["otherColumnName"].ToString().Substring(0,6)))时停止运行,并出现System.ArgumentOutOfRangeException错误。

有人知道我在做什么错吗?当我MessageBox子字符串工作时。

1 个答案:

答案 0 :(得分:1)

因此,首先,我建议将这种怪异重构为foreach循环。

foreach(var row in dataTable.Rows)
{
    foreach(var otherDataTable in dataTableList)
    {
        foreach(var otherRow in otherDataTable.Rows)
        {
            /* ... */
        }
    }
}

然后检查您要获取的string的子字符串的长度是否实际上为6或更长。

const int compareLength = 6;
const string columnName = "columnName";
const string otherColumnName = "otherColumnName";

foreach(var row in dataTable.Rows)
{
    foreach(var otherDataTable in dataTableList)
    {
        foreach(var otherRow in otherDataTable.Rows)
        {
            var value = row[columnName].ToString();
            var otherValue = otherRow[otherColumnName].ToString();

            if(otherValue.Length >= compareLength && 
               value == otherValue.Substring(0, compareLength))
            {
                /* Do something. */
            }
        }
    }
}

我敢打赌,当比较值小于6时,Substring会出现问题。看看是否有帮助。