Найдены минимальное и максимальное значение из набора данных, содержащего несколько таблиц - PullRequest
2 голосов
/ 06 октября 2011

Я занимаюсь разработкой приложения asp.net, в котором у меня есть набор данных с 3 таблицами, т.е. ds.Tables[0], Tables[1] and Tables[2]

Мне нужно найти минимальное и максимальное количество из всех 3 таблиц набора данных.Как это сделать?

Я нашел похожий вопрос в SO здесь , но не уверен, как это поможет мне продвинуться?

ОБНОВЛЕНО:

 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 ]

1 голос
/ 06 октября 2011

Если они имеют одинаковое имя столбца, предположим, что 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);
            }
        }
1 голос
/ 06 октября 2011

Вы можете выбрать минимальное и максимальное значения для каждой таблицы данных, используя метод Compute для каждой таблицы данных.

Отказ от ответственности это не безопасный код;Вы должны проверить на наличие ошибок, нулей и сделать его более читабельным.

Примерно так должно работать:

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()));
1 голос
/ 06 октября 2011

Вы можете использовать дополнительный цикл for, добавленный к решению, с которым вы уже связались. * 1001 Т.е. *

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);
}
}
...