Пользовательский orderby в linq к sql

Я уже искал архивы, но не могу найти решение, которое работает на linq к sql.

Как Вы создаете пользовательский orderby в linq к sql так, чтобы он генерировал код SQL как это

ORDER BY
CASE SEASON
  WHEN 'WINTER' THEN 1
  WHEN 'SPRING' THEN 2
  WHEN 'SUMMER' THEN 3
  WHEN 'AUTUMN' THEN 4
END

Обратите внимание, что пользовательские компараторы, кажется, не компилируют, и OrderByWeight, как замечено в этом учебном руководстве (http://www.skindog.co.uk/2009/03/18/custom-sorting-order-in-linq-order-by-weighting/), кажется, не существует

Примечание:

Я хочу, чтобы упорядочивание произошло на SQL-сервере а не в c#, поскольку это даст мне различные результаты, так как я делю свои результаты.

7
задан djskinner 30 August 2011 в 14:58
поделиться

2 ответа

Вот подход с использованием лямбда-выражения


MyTable
   .OrderBy (t => (t.Season == "Winter") ? 1 : (t.Season == "Spring") ? 2 : [...])
   .Select (
      t => new
{ MyColumn = t.MyColumn ... } )
12
ответ дан 6 December 2019 в 21:14
поделиться

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

(с моей головы)

from s in
  (from x in y select new { Sort = x.z == 'WINTER' ? 1 : x.z == 'SPRING' ? 2 : [...], Data = x })
orderby s.Sort
select s.Data

Что-то вроде этого

Надеюсь, это поможет

.
0
ответ дан 6 December 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: