在linq到sql中自定义orderby

时间:2009-12-27 18:38:28

标签: linq-to-sql

我已经搜索了档案,但找不到适用于linq to sql的解决方案。

如何在linq中创建自定义orderby到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#中进行排序,因为这会给我不同的结果,因为我正在对结果进行分区。

2 个答案:

答案 0 :(得分:12)

这是一种使用lambda表达式的方法


MyTable
   .OrderBy (t => (t.Season == "Winter") ? 1 : (t.Season == "Spring") ? 2 : [...])
   .Select (
      t => new
{ MyColumn = t.MyColumn ... } )

答案 1 :(得分:0)

您必须首先在内部循环中选择数据,然后从该结果中选择数据并在自定义列上正常排序:

(我的头脑)

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

像这样的东西

希望这有帮助