4

次のような場合があるという理由だけで、int ではなく文字列のフィールドがあります。

1, 2, 3, 3A, 5, 6 ...

現在、 orderby はある意味では正常に機能しますが、期待どおりには機能しません。

1
10
11
111
12
2
20
3

誰でもこれを行う考えがありますか? 私のDBは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
...
4

2 に答える 2

2

この列は 2 回マップできます。すべての操作で完全に 1 回。「選択」と注文の場合は 1 回のみです。XMLマッピングでは、次のようになります: (列名は [ AsNumber ] です)

<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))"
/>

私が使用した構文は、MS SQL Server のものです。上記の「 3A 」のようなケースを解決しようとします。単純に大きな値に変換されます...

「AsNumber」の挿入と更新が false に設定されていることに注意してください。および C# クラスのスニペット:

public virtual string AsString { get; set; }
public virtual int AsNumber { get; set; }

私はそれをテストしましたが、動作しています。流暢に似たようなものを使うのに時間がかからないと確信しています...

于 2012-11-03T12:14:37.527 に答える