在 linq-to-entities 查询中,在查询 nvarchar 列时,如何将空格添加到较短长度的值?
我寻求这种能力来促进对某些字段的正确排序。
这是我的场景:
我的数据库几乎在每个表中都包含零件编号列。这些零件号列在数据库中表示为 nvarchar(20)。它们通常包含 6 位和 8 位部件号的组合。这些部分“数字”中的绝大多数实际上是数字;但有些是非数字的。因此,它们被表示为字符串而不是整数。
因为这些部件号表示为字符串而不是数字,所以它们不能正确排序。6 位和 8 位值混合在一起,而不是单独分组。所以我想用前导空格填充较短的长度值来解决排序问题。
我确实意识到,如果这些列被存储为nchar而不是nvarchar,我会自动得到这个填充。但是此时更改这些列的数据类型不是一种选择。
当我制作自己的 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
这可以做到吗?谢谢!