我有2个数据表(1个来自xml,其他来自数据库),我试图比较。表与复合主键相关。我正在尝试执行以下代码。大约5000行需要超过一分钟。
我尝试使用datatable.Select()用于相同的bt没有用。有人可以建议如何优化代码以及我在这里缺少什么?
DataSet ds = new DataSet();
DataTable dtXmlRecs = new DataTable("records");
dtXmlRecs.Columns.Add(new DataColumn("A", typeof(int)));
dtXmlRecs.Columns.Add(new DataColumn("B", typeof(string)));
dtXmlRecs.Columns.Add(new DataColumn("C", typeof(int)));
dtXmlRecs.Columns.Add(new DataColumn("D", typeof(int)));
dtXmlRecs.Columns.Add(new DataColumn("E", typeof(string)));
dtXmlRecs.Columns.Add(new DataColumn("F", typeof(Int16)));
dtXmlRecs.Columns.Add(new DataColumn("H", typeof(byte)));
dtXmlRecs.Columns.Add(new DataColumn("I", typeof(decimal)));
dtXmlRecs.Columns.Add(new DataColumn("J", typeof(decimal)));
dtXmlRecs.Columns.Add(new DataColumn("K", typeof(decimal)));
dtXmlRecs.PrimaryKey = new DataColumn[] {
dtXmlRecs.Columns["E"]
, dtXmlRecs.Columns["F"]
, dtXmlRecs.Columns["H"] };
ds.Tables.Add(dtXmlRecs);
ds.ReadXml(@"c:\myxmlfile.xml");
DataTable dtOldData = objBAL.getOldData(
ds.Tables["records"].Rows[0]["B"].ToString());
dtOldData.PrimaryKey = new DataColumn[]
{ dtOldData.Columns["E"]
, dtOldData.Columns["F"]
, dtOldData.Columns["H"] };
ds.Tables.Add(dtOldData);
ds.Relations.Add(new DataRelation("OldNewData",
new DataColumn[]
{ dtOldData.Columns["E"]
, dtOldData.Columns["F"]
, dtOldData.Columns["H"] },
new DataColumn[]
{ dtXmlRecs.Columns["E"]
, dtXmlRecs.Columns["F"]
, dtXmlRecs.Columns["H"]}
, false));
DataRow drXml;
DataRow drCircle;
decimal diff;
for (int i = 0; i < dtXmlRecs.Rows.Count; i++)
{
drXml = dtXmlRecs.Rows[i];
//this function call is very slow.
drCircle = drXml.GetParentRow("OldNewData");
if (drCircle != null)
{
//code goes here
}
}
谢谢..