Я уже искал архивы, но не могу найти решение, которое работает на 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#, поскольку это даст мне различные результаты, так как я делю свои результаты.
Вот подход с использованием лямбда-выражения
MyTable
.OrderBy (t => (t.Season == "Winter") ? 1 : (t.Season == "Spring") ? 2 : [...])
.Select (
t => new
{
MyColumn = t.MyColumn
...
}
)
Вы должны сначала выбрать свои данные во внутреннем цикле, как вы это делали, затем выбрать данные из этого результата и отсортировать их нормально в вашей пользовательской колонке:
(с моей головы)
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
Что-то вроде этого
Надеюсь, это поможет
.