linq-to-entities クエリで、nvarchar 列に対してクエリを実行するときに、短い長さの値の先頭にどのようにスペースを追加しますか?
特定のフィールドの適切なソートを容易にするために、この機能を探しています。
ここに私のシナリオがあります:
事実上すべてのテーブルに部品番号列を含むデータベースがあります。これらの部品番号列は、データベースでは nvarchar(20) として表されます。通常、6 桁と 8 桁の両方の部品番号の組み合わせが含まれています。これらの部分の「数字」の大部分は、実際には数字です。ただし、一部は数値ではありません。したがって、それらは整数ではなく文字列として表されます。
これらの部品番号は数字ではなく文字列として表されるため、適切に並べ替えられません。6 桁と 8 桁の値は、別々にグループ化されるのではなく、混ざり合っています。したがって、並べ替えの問題を解決するために、短い長さの値に先頭のスペースを埋めたいと思います。
これらの列がnvarcharではなくncharとして格納されている場合、このパディングが自動的に取得されることを認識しています。ただし、これらの列のデータ型を変更することは、現時点ではオプションではありません。
独自の linq クエリを作成すると、適切に並べ替えることができます。
db.table.Select(_ => _.partNumberColumn).OrderBy(_ => _.Length).ThenBy(_ => _);
この問題は、他のツール (グリッドなど) がクエリを自動的に作成するときに発生します。次に、追加の並べ替え要件について知りません。したがって、長さが短い値の前にスペースを追加するのが良い解決策のようです。
クエリの例を次に示します。モデルを作成するときは、単に値を入れるのではなく、6 文字の値の前に 2 つのスペースを追加したいと考えています。
_db.HubAssembliesWides
.Select(_ =>
new Models.HubAssemblyModel()
{
HubAssemblyNumber = _.HubAssemblyNumber,
DetailedOnNumber = _.DetailedOnNumber,
HubMachiningNumber = _.HubMachiningNumber,
HubCastingNumber = _.HubCastingNumber,
ComponentHubAssemblyNumber = _.ComponentHubAssemblyNumber
}
);
だから代わりに
HubAssemblyNumber = _.HubAssemblyNumber
私が欲しい
HubAssemblyNumber = _.HubAssemblyNumber.Length == 6 ? " " + _.HubAssemblyNumber : _.HubAssemblyNumber
これはできますか?ありがとう!