【问题标题】:How to prepend spaces in LINQ to Entities queries如何在 LINQ to Entities 查询中添加空格
【发布时间】:2013-04-06 17:08:06
【问题描述】:

在 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

这可以吗?谢谢!

【问题讨论】:

    标签: c# .net entity-framework linq-to-entities


    【解决方案1】:

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

    HubAssemblyNumber = _.HubAssemblyNumber.Length == 6 ? "  " + _.HubAssemblyNumber : _.HubAssemblyNumber
    

    当被 linq-to-entities 翻译成 T-SQL 时,被翻译成 case 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多