none
LINQ to DataTable - cтрока с максимумом RRS feed

  • Вопрос

  • Здравствуйте,
    Как относительно начинающий я знаю, что есть канонический способ найти максимум по группам в таблице. Пусть есть таблица с 3-мя полями n, hour и res. Найти максимум поля res по каждому значению поля hour можно так

    var query =
    	from row in dtStat.AsEnumerable()
            group row by row.Field<Int32>("hour") into g
            select new
            {
             	h = g.Key,
                    max =  g.Max(rr => rr.Field<double>("res"))
            };
     
    foreach (var r in query)
            {
             // тут максимум по каждому r.h равен r.max
            }

    А вот как определить значение поля n, соответствующее этому максимуму?

    Что-то у меня никак не получается внедрить в структуру query поле n... Сделал пока в виде: "группировка" - "ранжирование" - первая строка с максимумом.

    Заранее благодарю за оперативный ответ



    • Изменено abb269 19 февраля 2016 г. 7:22
    19 февраля 2016 г. 7:18

Ответы

  • А если методом сортировки OrderByDescending? и потом можно получить первый элемент после сортировки по убыванию.

    Или лучше сразу отсортировать таблицу, а потом конструировать запросы.

    в секции группировки уже можете сразу обратитсья к первому элементу First()


    Mak Arti


    • Изменено Маквецян Артур 19 февраля 2016 г. 9:50
    • Помечено в качестве ответа abb269 19 февраля 2016 г. 14:35
    19 февраля 2016 г. 8:28

Все ответы

  • А если методом сортировки OrderByDescending? и потом можно получить первый элемент после сортировки по убыванию.

    Или лучше сразу отсортировать таблицу, а потом конструировать запросы.

    в секции группировки уже можете сразу обратитсья к первому элементу First()


    Mak Arti


    • Изменено Маквецян Артур 19 февраля 2016 г. 9:50
    • Помечено в качестве ответа abb269 19 февраля 2016 г. 14:35
    19 февраля 2016 г. 8:28
  • Добрый день.

    Вопрос из серии. Я из результатов выборки убрал нужные мне данные. Как мне эти данные получить назад.

    Или откажитесь от Select, или добавьте в него n:

            select new
            {
             	h = g.Key,
                    max =  g.Max(rr => rr.Field<double>("res")),
                    n =  g.Max(rr => rr.Field<double>("n"))
            };

    • Предложено в качестве ответа Павел Ахрамеев 24 февраля 2016 г. 6:49
    • Отменено предложение в качестве ответа abb269 25 февраля 2016 г. 8:33
    19 февраля 2016 г. 10:50
    Отвечающий
  • Добрый день.

    Вопрос из серии. Я из результатов выборки убрал нужные мне данные. Как мне эти данные получить назад.

    Или откажитесь от Select, или добавьте в него n:

            select new
            {
             	h = g.Key,
                    max =  g.Max(rr => rr.Field<double>("res")),
                    n =  g.Max(rr => rr.Field<double>("n"))
            };

    Алексей, Ваш селект не работает. По всем группам и максимумам выдает одно значение. Очень похоже, что это просто максимум поля "n", что ожидаемо, если прямо "читать" условие
    Max(rr => rr.Field<double>("n"))

    19 февраля 2016 г. 11:34
  • А если методом сортировки OrderByDescending? и потом можно получить первый элемент после сортировки по убыванию.

    Или лучше сразу отсортировать таблицу, а потом конструировать запросы.

    в секции группировки уже можете сразу обратитсья к первому элементу First()


    Mak Arti



    Спасибо, ну я это в общем имел в виду, когда говорил о ранжировании. Правильнее было сказать, конечно, сортировка.
    25 февраля 2016 г. 8:34