我有给定记录的类,需要对其进行排序。
值是简单的0,1,2。问题是客户需要记录以基于类名而不是类值的顺序显示。顺序应如下所示。
class (TBD)= 0
class (2/3)= 2
class (1)= 1
Using System.Linq.Dynamic
我已经能够将列和方向传递到我的OrderBy()
中。有没有一种方法可以传递将强制排序顺序为上升:
类别(TBD)= 0,
类(2/3)= 2,
等级(1)= 1
降序:
(1)级= 1,
等级(2/3)= 2,
类别(TBD)= 0
我试过了
升序:
sort = "(Class = 0) desc, (Class = 2) desc, (Class = 1) 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);
最佳答案
您的字符串不是Dynamic Linq的有效排序语法。尝试:
sort = "iif(Class == 1, 0, iif(Class == 2, 1, 2))";
它使用Dynamic Linq中可用的内联if表达式(至少有其一种形式;有关更多文档,请参见here)将Class值转换为直观可排序的东西。等效的vanilla SQL是按case语句排序的。