我有一个记录,给出了我需要订购的类。
值很简单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);
答案 0 :(得分:3)
您的字符串不是Dynamic Linq的有效排序语法。尝试:
sort = "iif(Class == 1, 0, iif(Class == 2, 1, 2))";
这使用动态Linq中可用的内联if表达式(至少有一种风格;请参阅here获取更多文档)将Class值转换为直观可订购的内容。 vanilla SQL等价物是按case语句排序。