Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net c中使用datatable上的linq获得sum(第1列)-sum(第2列)#_C#_Sql Server_Linq_Datatable_Ado.net - Fatal编程技术网

C# 如何在asp.net c中使用datatable上的linq获得sum(第1列)-sum(第2列)#

C# 如何在asp.net c中使用datatable上的linq获得sum(第1列)-sum(第2列)#,c#,sql-server,linq,datatable,ado.net,C#,Sql Server,Linq,Datatable,Ado.net,Dattemp表Dr和Cr中有两列。我需要结果和(Dr)-和(Cr),在datdetail表的期初余额列中包含Dattemp的where子句 for (int i = 0; i < datDetail.Rows.Count; i++) { datDetail.Rows[i]["Opening Balance"] = Convert.ToDouble(DatTemp.AsEnumerable().Where(r => r.Field

Dattemp表Dr和Cr中有两列。我需要结果和(Dr)-和(Cr),在datdetail表的期初余额列中包含Dattemp的where子句

       for (int i = 0; i < datDetail.Rows.Count; i++)
        {
            datDetail.Rows[i]["Opening Balance"] = Convert.ToDouble(DatTemp.AsEnumerable().Where(r => r.Field<int>("Identity ID") == Convert.ToInt32(datDetail.Rows[i]["Identity ID"]) && (r.Field<DateTime>("Date") <= Convert.ToDateTime(TxtFromDate.Text.Trim()))).Sum(r => r.Field<decimal>("CR")) - DatTemp.AsEnumerable().Sum(r => r.Field<decimal>("DR"))).ToString("00.00");
            datDetail.Rows[i]["Clossing Balance"] = Convert.ToDouble(DatTemp.AsEnumerable().Where(r => r.Field<int>("Identity ID") == Convert.ToInt32(datDetail.Rows[i]["Identity ID"]) && (r.Field<DateTime>("Date") <= Convert.ToDateTime(TxtToDate.Text.Trim()))).Sum(r => r.Field<decimal>("CR")) - DatTemp.AsEnumerable().Sum(r => r.Field<decimal>("DR"))).ToString("00.00");
        }

        GridDetails.DataSource = datDetail;
        GridDetails.DataBind();
for(int i=0;ir.Field(“Identity ID”)==Convert.ToInt32(datDetail.Rows[i][“Identity ID”])&(r.Field(“Date”)r.Field(“CR”)-DatTemp.AsEnumerable().Sum(r=>r.Field(“DR”)).ToString(“00”);
datDetail.Rows[i][“Closing Balance”]=Convert.ToDouble(DatTemp.AsEnumerable()。其中(r=>r.Field(“Identity ID”)==Convert.ToInt32(datDetail.Rows[i][“Identity ID”])和(r.Field(“Date”)r.Field(“CR”)-DatTemp.AsEnumerable().Sum(r=>r.Field(“DR”)).ToString(“00”);
}
GridDetails.DataSource=datDetail;
GridDetails.DataBind();

您可以尝试以下方法:

var openBal = DatTemp.Compute("Sum(OpeningBalance)", "");
var closeBal = DatTemp.Compute("Sum(ClosingBalance)", "");
var difference = Math.Abs(openBal - closeBal);//you may need to cast here

你有什么问题?如果你已经做了加法,是什么阻止你做减法?这些“一行”可能是到目前为止我见过的最不可读的LINQ查询。请使用变量并使用列名而不是索引。包括您自己的计算在内,没有人会理解这一点proper@gurmeetsingh:您应该显示样本、当前结果和所需结果。什么是“不正确”我这样做了,但是我需要一条语句,用于在DataTable上使用linq的期初余额=sum(CR)-sum(DR)。您可以尝试像var sum=table.AsEnumerable().sum(x=>x.Field(“SomeProperty”);是的,先生,但是我现在有10000行,我知道它会增加,这就是为什么我需要一条语句。在for循环中,它需要时间