从包含多个表的数据集中找到最小值和最大值

时间:2011-10-06 13:31:18

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

我正在开发一个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 个答案:

答案 0 :(得分:1)

您可以使用额外的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);
}
}

答案 1 :(得分:1)

如果它们具有相同的列名,则假设为'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);
            }
        }

答案 2 :(得分: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()));