Mysql 在Nhibernate中对类似数字的字符串进行排序

Mysql 在Nhibernate中对类似数字的字符串进行排序,mysql,nhibernate,fluent-nhibernate,Mysql,Nhibernate,Fluent Nhibernate,我有一个字段是字符串而不是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

我有一个字段是字符串而不是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
...

您可以创建一个公式字段,如

Map(x => x.MyColumnAsNumber).Formula("CAST(MyColumn AS int)");

然后按该字段排序。

您可以将此列映射两次。一次完成所有操作。一次仅用于“选择”和订购。 在XML映射中,它将如下所示:(列名为[AsNumber


我已经测试过了,它正在工作。我确信在fluent中使用类似的语言不会花费你太长时间…

3A不应该在后面。修改了我的qn。我想说的关键点是:现在你知道怎么做了。主要技巧是引入第二个映射,而不进行更新和插入。然后可以使用此属性进行排序。IF子句中的最终语法是什么样子取决于您的进一步调整…例如,您可以将字符转换为ASCII代码,并将其作为小数部分追加。。。我相信你会找到比我更好的算法来满足你的需要。。。嗯,你知道如何绘制地图,我相信这会对你有所帮助。这有意义吗?@RadimKöhler。我猜op不做hbm文件,需要流利的nhib,如果有的话+根据您对添加另一个专门用于订购的属性的分析,Thome 1创建了一个解决方案。将你的答案标记为已接受。
<property name="AsString" column="AsNumber"  />
<property name="AsNumber"  insert="false" update="false" 
 formula="(CAST ( CASE WHEN ISNUMERIC([AsNumber]) &lt;&gt; 0 THEN [AsNumber] ELSE '99999999' END  as int))"
/>
public virtual string AsString { get; set; }
public virtual int AsNumber { get; set; }