Сортировка вывода из Linq с группировкой по - PullRequest
1 голос
/ 17 ноября 2011

Запрос linq ниже не возвращает результаты, упорядоченные по полю последовательности в порядке убывания. Вместо этого результаты возвращаются без учета порядка:

var qr = from l in reports.layouts
    where l.job == jobNumber
    orderby l.sequence descending
    group l by l.filename;

Однако приведенный ниже код может возвращать результаты, сгруппированные по полю имени файла, и упорядоченные по убыванию по полю последовательности:

var qr = reports.layouts
   .Where(l => l.job == jobNumber)
   .OrderBy(l => l.filename)
   .GroupBy(l => l.filename, (l, c) => c.OrderByDescending(x => x.sequence));

Может ли кто-нибудь предложить какое-либо понимание того, как должен быть написан первый запрос, чтобы вернуть результаты в нужной последовательности по убыванию?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Группировка уничтожает заказ.Ваши два запроса не совпадают.

Первый переводится во что-то более похожее на:

var qr = reports.layouts
   .Where(l => l.job == jobNumber)
   .OrderByDescending(l => l.sequence)
   .GroupBy(l => l.filename);

Поскольку GroupBy происходит после заказа, он фактически уничтожает порядок.* Лично, это один из случаев, когда я нахожу синтаксис цепочки методов, который вы использовали, гораздо более понятным с точки зрения намерений, чем эквивалентный синтаксис запроса.

1 голос
/ 17 ноября 2011
var qr =
  from l in reports.layouts
  where l.job == jobNumber
  group l by l.filename into g
  orderby g.Key descending
  select
    from x in g
    orderby x.sequence descending
    select x;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...