首页 > 解决方案 > 如何在 C# 中编写多行 SQL 字符串但将其视为单行字符串

问题描述

应用程序中有一部分会生成 SQL 语句。它有一个单元测试,目前只比较给定的查询字符串是否与预期的查询字符串匹配。我正在使用带插值的多行字符串(简化示例)

command.Should().Be($@"UPDATE `todo`
                       SET `todo`.`is_done`=0
                       WHERE `todo`.`id`='a9cebb04-fa7d-4071-9f3e-0704bd3352fa'");

以这种方式编写多行字符串看起来像这样

"UPDATE `todo`
                                SET `todo`.`is_done`=0
                                WHERE `todo`.`id`='a9cebb04-fa7d-4071-9f3e-0704bd3352fa'"

标识用空字符填充。通过代码生成的 SQL 字符串是这样的

"UPDATE `todo` SET `todo`.`is_done`=0 WHERE `todo`.`id`='a9cebb04-fa7d-4071-9f3e-0704bd3352fa'"

单元测试失败,因为生成的字符串与预期的字符串不匹配。如何从预期的字符串中删除空字符?因为目前测试失败了

预期字符串为 ... 长度为 377,但 ... 长度为 206 ...

标签: c#sql

解决方案


您可以使用字符串连接在源代码中实现类似的格式,以及所需的字符串值:

command.Should().Be("UPDATE `todo` " +
                    "SET `todo`.`is_done`=0 " +
                    "WHERE `todo`.`id`='a9cebb04-fa7d-4071-9f3e-0704bd3352fa'");

推荐阅读