如何比较2个数据表中的金额总和

时间:2015-08-12 11:58:42

标签: c# asp.net

我想验证主列中的金额总和以及详细列中的拆分金额。

我想逐个检查循环(Master和Detail),然后如果没有匹配,则向用户弹出一条消息

我有一个来自csv文本文件的记录,如下例所示:

column1,column2,column3,column4,column5,column6,column7,column8,column9,column10
********************************************************************************  
Master,123456789,12345,03434343,2015-05-14,2015-05-29,16,100.00,0.00,2
Detail,123456789,12345,10.0,20.0,30.0,15.0,15.0,3.0,7.0
Master,893434343,34567,03432323,2015-05-14,2015-05-29,16,100.00,0.00,2
Master,123456789,12345,03434343,2015-05-14,2015-05-29,16,100.00,0.00,2
Detail,123456789,12345,10.0,20.0,30.0,15.0,15.0,3.0,7.0
Footer,0453434,12123243,2015-05-28,0800,052015,2,200.00,AED,1531 

从上面的文件中,规则将是

  1. 主记录可能包含也可能不包含明细记录
  2. 如果找到主记录的详细记录,则第2列
  3. 的列相同
  4. 如果找到主记录的详细记录,那么(第4到第10列)主数据的详细记录总和等于主记录第8列
  5. 我已将主记录复制到Datatable dt1,并将详细记录复制到文件中的Datatable dt2。

    如何比较金额总和并向用户提出无效匹配错误?

1 个答案:

答案 0 :(得分:0)

这段代码不优雅,可能有更好的方法。但是,我不确定在你的情况下,我已经用数据做了数据表。特别是因为你没有分享dt1和dt2的布局。

List<String[]> results = new List<String[]>();
String[] rawdata = File.ReadAllLines("c:\\data.txt");
for (int i = 2; i < rawdata.Length; i++)
{
    String[] tmp = rawdata[i].Split(',');
    if (tmp.Length == 10)
    {
        if ((tmp[0] == "Master") && (i < rawdata.Length))
        {
            float col4;
            float col5;
            float col6;
            float col7;
            float col8;
            float col9;
            float col10;
            float sum;
            String[] tmp2 = rawdata[i + 1].Split(',');
            if (tmp2.Length == 10 && tmp2[0] == "Detail" && tmp[1] == tmp2[1] )                           
            {
                if (float.TryParse(tmp2[3], out col4) && float.TryParse(tmp2[4], out col5) && float.TryParse(tmp2[5], out col6) && float.TryParse(tmp2[6], out col7) && float.TryParse(tmp2[7], out col8) && float.TryParse(tmp2[8], out col9) && float.TryParse(tmp2[9], out col10))
                {
                    if (float.TryParse(tmp[7], out sum))
                    {
                        if (sum == col4 + col5 + col6 + col7 + col8 + col9 + col10)
                        {
                            results.Add(new String[] { tmp[1], "Matches" });
                        }
                        else results.Add(new String[] { tmp[1], "Doesnt match" });
                        continue;
                    }
                }          
            }
            results.Add(new String[] { tmp[1], "No detail" });
        }
    }
}

我可以直观地确认结果包含所有答案