【问题标题】:how we get sum(column 1)-sum(column 2) using linq on datatable in asp.net c#我们如何在 asp.net c# 的数据表上使用 linq 得到 sum(column 1)-sum(column 2)
【发布时间】:2018-03-19 10:37:34
【问题描述】:

Dattemp 表 Dr 和 Cr 中有两列。我需要结果 sum(dr)-sum(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();

【问题讨论】:

  • 你遇到了什么问题?
  • 如果你已经完成了 SUM 是什么阻止你做减法?
  • 这些“单行”可能是迄今为止我见过的最不可读的 LINQ 查询。使用变量并使用列名而不是索引。没有人会理解这一点,包括你自己
  • 计算不正确
  • @gurmeetsingh:您应该显示样本、当前结果和您想要的结果。 “不合适”是什么意思?

标签: c# sql-server linq datatable ado.net


【解决方案1】:

你可以试试这样的:

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 的单一语句来打开余额 = sum(CR)-sum(DR)
  • 你可以试试 var sum = table.AsEnumerable().Sum(x=>x.Field("SomeProperty"));
  • 是的,先生,但我现在有 10000 行,我知道它会增加,这就是我需要单个语句的原因。在for循环中需要时间
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多