我有一个字符串而不是int,只是因为可能会出现这样的情况:
1, 2, 3, 3A, 5, 6 ...
现在,orderby在某种程度上运行良好,但并不像预期的那样:
1
10
11
111
12
2
20
3
有人知道这样做吗?我的数据库是MySQL
。我在其他问题上注意到了这个解决方案..
ORDER BY category_id + 0
如何在Fluent Nhibernate中实现它?
修改
要澄清,所需的顺序应为:
1
2
3
3A
10
11
12
20
111
...
编辑2
另请注意,它可能不仅仅是3A,它还可能有更多输入,例如:3B,3C。
订单将是:
1
2
3
3A
3B
3C
10
11
...
答案 0 :(得分:2)
您可以将此列映射两次。完全适用于所有操作。一次仅用于“选择”和订购。 在 XML 映射中,它将如下所示:(列名为[ AsNumber ])
<property name="AsString" column="AsNumber" />
<property name="AsNumber" insert="false" update="false"
formula="(CAST ( CASE WHEN ISNUMERIC([AsNumber]) <> 0 THEN [AsNumber] ELSE '99999999' END as int))"
/>
我使用的语法来自MS SQL Server。它试图解决上面的“ 3A ”之类的情况。它将简单地转换为一些大的价值......
请注意,'AsNumber'的insert和update设置为false。 和C#类片段:
public virtual string AsString { get; set; }
public virtual int AsNumber { get; set; }
我已经测试了它并且它正在运行。我确信使用类似的流利不会花费你很长时间......
答案 1 :(得分:0)
您可以创建类似
的公式字段Map(x => x.MyColumnAsNumber).Formula("CAST(MyColumn AS int)");
然后按该字段排序。