如何在LINQ中为实体查询添加空格
本文关键字:实体 查询 添加 空格 LINQ | 更新日期: 2023-09-27 18:07:40
在链接到实体的查询中,当查询nvarchar列时,如何在较短的值前加上空格?
我寻求这种功能是为了方便对某些字段进行适当的排序。
这是我的场景:
我有一个数据库,它包含零件号列几乎每个表。这些部件号列在数据库中表示为nvarchar(20)。它们通常包含6位和8位部件号的组合。这些部分的绝大多数"数字"实际上都是数字;但有些是非数字的。因此,它们被表示为字符串而不是整数。
因为这些部件号被表示为字符串而不是数字,所以它们不能正确排序。6位数和8位数的值混合在一起,而不是单独分组。所以我想用前导空格填充较短长度的值来解决排序问题。
我确实意识到,如果这些列存储为nchar而不是nvarchar,我将自动获得这个填充。但是,目前还不能更改这些列的数据类型。当我制作自己的linq查询时,我可以正确地进行排序:
db.table.Select(_ => _.partNumberColumn).OrderBy(_ => _.Length).ThenBy(_ => _);
当其他工具(如grid)自动组合查询时,问题就出现了。那就不知道额外的分拣要求了。因此,一个好的解决方案似乎是在较短长度的值前加上空格。
下面是一个示例查询。当我构建模型时,而不仅仅是引入值,我想在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
这能做到吗?谢谢!
惊喜!我没有意识到我提出的语法实际上是有效的。
HubAssemblyNumber = _.HubAssemblyNumber.Length == 6 ? " " + _.HubAssemblyNumber : _.HubAssemblyNumber
当linq-to-entities转换成T-SQL时,被转换成case语句。