我有给定记录的类,需要对其进行排序。

值是简单的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语句排序的。

10-04 14:40