我已经搜索了档案,但找不到适用于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#中进行排序,因为这会给我不同的结果,因为我正在对结果进行分区。
答案 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
像这样的东西
希望这有帮助