【问题标题】:Found minimum and maximum value from dataset containing multiple tables从包含多个表的数据集中找到最小值和最大值
【发布时间】:2011-12-02 06:17:58
【问题描述】:

我正在开发一个 asp.net 应用程序,其中我有一个包含 3 个表的数据集,即ds.Tables[0], Tables[1] and Tables[2]

我需要从所有 3 个数据集表中找到最小数量和最大数量。该怎么做?

我在 SO here 中发现了类似的问题,但不确定这对我有什么帮助?

更新:

 double minValue = double.MinValue;
 double maxValue = double.MaxValue;
 foreach (DataRow dr in dtSMPS.Rows)
 {
            double actualValue = dr.Field<double>("TOTAL_SUM");  // This fails specifying type cast error
            minValue = Math.Min(minValue, actualValue);
            maxValue = Math.Max(maxValue, actualValue);
 }

请指导!谢谢。

【问题讨论】:

  • 你的意思是整数/十进制字段的最小值还是最大值,它是 3 个表中每一个中的一列?
  • 它是所有 3 个表中的小数(浮点)字段..
  • 它们的列名是否相同?

标签: c# asp.net visual-studio datatable dataset


【解决方案1】:

您可以在每个 DataTable 上使用 Compute 方法为每个 DataTable 选择最小值和最大值。

免责声明这不是安全代码;您应该检查错误、空值并使其更具可读性。

这样的事情应该可以工作:

decimal max = Math.Max(Convert.ToDecimal(ds.Tables[2].Compute("MAX(AccountLevel)","").ToString()),  Math.Max(Convert.ToDecimal(ds.Tables[0].Compute("Max(AccountLevel)","").ToString()),Convert.ToDecimal(ds.Tables[1].Compute("Max(AccountLevel)","").ToString()));

【讨论】:

    【解决方案2】:

    如果它们具有相同的列名,假设 'decimalValue' 则:

    decimal minAccountLevel = decimal.zero;
    decimal maxAccountLevel = decimal.zero;
    for (int i = 0; i < dts.Tables.Count; i++)
            {
                foreach (DataRow dr in dts.Tables[i].Rows)
                {
                    decimal accountLevel = decimal.Parse(dr["decimalValue"].ToString());
                    minAccountLevel = Math.Min(minAccountLevel, accountLevel);
                    maxAccountLevel = Math.Max(maxAccountLevel, accountLevel);
                }
            }
    

    【讨论】:

      【解决方案3】:

      您可以在已链接到的解决方案中使用额外的 for 循环。 即

      int minAccountLevel = int.MaxValue;
      int maxAccountLevel = int.MinValue;
      
      for (int i = 0; i < 3; i++)
      {
      var table = ds.Tables[i];
      foreach (DataRow dr in table.Rows)
      {
          int accountLevel = dr.Field<int>("AccountLevel");
          minAccountLevel = Math.Min(minAccountLevel, accountLevel);
          maxAccountLevel = Math.Max(maxAccountLevel, accountLevel);
      }
      }
      

      【讨论】:

      • 感谢您的输入。正如我的一个 cmets 中提到的,我的列的数据类型是十进制。因此我将数据类型更改为十进制,但代码失败。
      • 它可以为空吗?尝试检查 dr["column"] == DBNull.Value,如果它不为空,您可以尝试使用 Convert.ToDecimal(dr["column"])。
      猜你喜欢
      • 2018-01-09
      • 1970-01-01
      • 2011-06-28
      • 2013-06-05
      • 1970-01-01
      • 2017-07-24
      • 2017-03-22
      • 2012-02-26
      • 2021-06-15
      相关资源
      最近更新 更多