我有两个DataTables:
DataTable original;
DataTable modified;
这两个表的行数相同,列和数据相同。
我希望我的modified
datable确定要与original
数据表进行比较的每一行。如果modified
数据表中的行不等于original
数据表的行,则行.RowState
将从{{1}设置为.SetModified()
数据表。
例如:
............................................... ....
如果modified
中的row1不等于orginal
中的row1,那么modified
如果row1.SetModified()
中的row2不等于orginal
modified
....等中的row2
............................................... .............
它应该不是这样的:
............................................... .............
如果then row2.SetModified()
中的row1不等于orginal
中的row2,那么modified
如果row1.SetModified()
中的row2不等于orginal
中的row3,那么modified
......等等
............................................... .............
明白了吗? :)
不使用row1.SetModified()
的任何代码建议?
答案 0 :(得分:4)
在另一个foreach中使用foreach循环是N X N比较,你不需要这样做。
将第一行与其他表的第一行进行比较,将第二行与第二行进行比较,依此类推,使用Zip扩展方法对于这种情况非常有用。
DataTable original;
DataTable modified;
// your stuff
modified = modified.AsEnumerable().Zip<DataRow, DataRow, DataRow>(original.AsEnumerable(), (DataRow modif, DataRow orig) =>
{
if (!orig.ItemArray.SequenceEqual<object>(modif.ItemArray))
{
modif.SetModified();
}
return modif;
}).CopyToDataTable<DataRow>();
答案 1 :(得分:3)
看看这段代码。您可以使用它来查看它是否符合您的需求:
class Program
{
static void CompareRows(DataTable table1, DataTable table2)
{
foreach (DataRow row1 in table1.Rows)
{
foreach (DataRow row2 in table2.Rows)
{
var array1 = row1.ItemArray;
var array2 = row2.ItemArray;
if (array1.SequenceEqual(array2))
{
Console.WriteLine("Equal: {0} {1}",
row1["Drug"], row2["Drug"]);
}
else
{
Console.WriteLine("Not equal: {0} {1}",
row1["Drug"], row2["Drug"]);
}
}
}
}
static DataTable GetTable1()
{
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Rows.Add(25, "Indocin", "David");
table.Rows.Add(50, "Enebrel", "Cecil");
return table;
}
static DataTable GetTable2()
{
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Rows.Add(21, "Combivent", "Janet");
table.Rows.Add(50, "Enebrel", "Cecil");
table.Rows.Add(10, "Hydralazine", "Christoff");
return table;
}
static void Main()
{
CompareRows(GetTable1(), GetTable2());
}
}
答案 2 :(得分:3)
试试这个
this.cfg.highlighter={show: true,tooltipAxes: 'y',useAxesFormatters: false,tooltipFormatString: "%'d"};
答案 3 :(得分:1)
我认为遵循逻辑更好。
var