>
>
>
V3078. Sorting keys priority will be re…


V3078. Sorting keys priority will be reversed relative to the order of 'OrderBy' method calls. Perhaps, 'ThenBy' should be used instead.

Анализатор обнаружил потенциальную ошибку: два раза подряд вызываются методы 'OrderBy' или 'OrderByDescending'. Результат такой сортировки может отличаться от ожидаемого.

Рассмотрим пример:

var seq = points.OrderBy(item => item.Primary)
                .OrderBy(item => item.Secondary);

Допустим, программист хотел отсортировать коллекцию так, чтобы элементы были сгруппированы и отсортированы по 'Primary', а внутри каждая группа была отсортирована по 'Secondary'.

Но на самом деле элементы коллекции будут сгруппированы и отсортированы по 'Secondary', а внутри каждая группа будет отсортирована по 'Primary'.

Для получения ожидаемого поведения второй вызов 'OrderBy' следует заменить на вызов метода 'ThenBy'.

var seq = points.OrderBy(item => item.Primary)
                .ThenBy(item => item.Secondary);

Используя два вызова 'OrderBy', получить предполагаемое поведение также можно, но для этого необходимо поменять вызовы местами:

var seq = points.OrderBy(item => item.Secondary)
                .OrderBy(item => item.Primary);

Аналогичную ошибку можно допустить при написании кода с использованием синтаксиса запроса:

var seq = from item in points
          orderby item.Primary
          orderby item.Secondary 
          select item;

Код можно исправить следующим образом:

var seq = from item in points
          orderby item.Primary, item.Secondary
          select item;

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3078.