尽管第二张表中的值是第一张表中值的1.5 *,但我正在尝试证明两个数据表之间的相等性。
执行比较时,我无法迭代超过数据表的第一行。 foreach循环仅迭代第一行。
我的比较功能:
public static bool CompareRowContent(DataTable table1, DataTable table2)
{
foreach (DataRow row1 in table1.Rows)
foreach (DataRow row2 in table2.Rows)
{
var decimals1 = GetDecimals(row1.ItemArray, (decimal)1.5);
var decimals2 = GetDecimals(row2.ItemArray, (decimal)1.0);
if (decimals1.SequenceEqual(decimals2))
{
return true;
}
return false;
}
return false;
}
乘数函数:
static List<decimal> GetDecimals(object[] array, decimal multiplier)
{
var list = new List<decimal>();
foreach (object value in array)
{
try
{
decimal result = (decimal) value;
result *= multiplier;
list.Add(result);
}
catch
{
// Error.
}
}
return list;
}
...以及我试图证明行数相等的测试:
[TestMethod]
public void Compare_Values()
{
bool compareValueResult = Helper.CompareRowContent(_table1, _table2);
Assert.IsTrue(compareValueResult, "Row content does not match");
}
我希望foreach循环遍历表中的每一行,如果匹配则返回true,否则返回false。实际结果仅基于第一行为“ true”,但不评估其他行。
如果我看着小数点1和小数点2变量,整个表都在那儿...但是在循环中从未使用过。
请帮助我遍历整个数据表!
答案 0 :(得分:2)
您有一个嵌套循环,可以将table1中的每一行与table2中的每一行进行比较。
编写该代码的最简单方法是:
public static bool CompareRowContent(DataTable table1, DataTable table2)
{
if (table1.Rows.Count != table2.Rows.Count)
{
return false;
}
for (int i = 0; i < table1.Rows.Count; i++)
{
var row1 = table1.Rows[i];
var row2 = table2.Rows[i];
var decimals1 = GetDecimals(row1.ItemArray, (decimal)1.5);
var decimals2 = GetDecimals(row2.ItemArray, (decimal)1.0);
if (!decimals1.SequenceEqual(decimals2))
{
return false;
}
}
return true;
}