如何在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

这能做到吗?谢谢!

如何在LINQ中为实体查询添加空格

惊喜!我没有意识到我提出的语法实际上是有效的。

HubAssemblyNumber = _.HubAssemblyNumber.Length == 6 ? "  " + _.HubAssemblyNumber : _.HubAssemblyNumber
当linq-to-entities转换成T-SQL时,

被转换成case语句。