【发布时间】:2019-04-08 08:32:48
【问题描述】:
我正在编写一个 C# 应用程序,用于比较两个不同选择的结果是否相同以及它们是执行时间,以进行优化。
其实我是用秒表来获取执行时间,然后将OracleDataReaders转换成DataTable并比较行,顺序独立,像这样:
var tableA = new DataTable();
tableA.Load(readerA);
var tableB = new DataTable();
tableB.Load(readerB);
bool equals = true;
for (int i = 0; i < tableA.Rows.Count; i++)
{
if (!DataRowComparer.Default.Equals(tableA.Rows[i],tableB.Rows[i]))
{
equals = false;
break;
}
}
return equals;
但我假设将 OracleDataReader 转换为 DataTable,然后使用循环比较行是相同的,并且顺序相同。
是否有任何使用 C# 和 Oracle 的预构建方法来比较有/无行顺序的两个选择的结果?
谢谢
【问题讨论】:
-
我不确定
tableBRow == tableARow是否会以您想要的方式比较行。默认的Equals实现将比较等号的两侧是否引用同一个对象(同一个对象,同时创建)。可能您想比较每列中的值以查看值是否相同。这个答案似乎很相关:stackoverflow.com/questions/9064485/… -
@mortb true,我没有正确比较对象,更新了。
-
但我真正的问题是,如果不将 OracleDataReaders 转换为 DataTables 然后循环它们,无论如何都知道两个选择的结果是否相同(有或无顺序)?
-
您的问题的答案并不完全直截了当,这取决于您究竟想要达到什么目标,以及您希望在解决方案上付出多少努力。似乎您的解决方案可以重写,因此它只使用两个
OracleDataReaders循环它们,通过在第一个Read()上调用第一个Read()方法,然后第二个,逐个循环遍历它们上的列并比较它们,直到你发现任何不同。当您跳过填充两个DataSets的步骤时,这至少会更快一些。