使用System.Linq.Dynamic定制排序顺序

时间:2015-08-11 16:09:48

标签: c# linq sorting

我有一个记录,给出了我需要订购的类。

值很简单0,1,2。问题是客户端需要基于类名而不是类值的顺序出现记录。订单应如下所示。

class (TBD)= 0
class (2/3)= 2 
class (1)= 1

Using System.Linq.Dynamic我已经能够将列和方向传递到我的OrderBy()。有没有办法传入一个强制排序顺序为

的表达式

升序:     class(TBD)= 0,     class(2/3)= 2,     class(1)= 1

降序: class(1)= 1, class(2/3)= 2, class(TBD)= 0

我试过了 ASC:

sort = "(Class = 0) desc, (Class = 2) desc, (Class = 1) desc";

desc:

sort = "(Class = 1) desc, (Class = 2) desc, (Class = 0) desc";

但是我得到Operator '=' incompatible with operand types 'String' and 'Int32'之前我正在使用'=='并得到类似的消息。

 searchUniq = searchUniq.OrderBy(sort).Skip(skip).Take(25);

1 个答案:

答案 0 :(得分:3)

您的字符串不是Dynamic Linq的有效排序语法。尝试:

sort = "iif(Class == 1, 0, iif(Class == 2, 1, 2))";

这使用动态Linq中可用的内联if表达式(至少有一种风格;请参阅here获取更多文档)将Class值转换为直观可订购的内容。 vanilla SQL等价物是按case语句排序。