1

我正在使用字符串生成器来构建一些 SQL 脚本。我有一些布尔属性,我想测试它们,然后根据真/假输出不同的文本。在为变量赋值时,我有下面的 C# 语法,但它不适用于这种特殊情况。有任何想法吗?

我习惯做的事情:

string someText = (dbInfo.IsIdentity) ? "First Option" : "Second Option";

试图在 StringBuilder 方法中复制相同的东西,但这不起作用..

script.Append("sometext" + (dbInfo.IsIdentity) ? " IDENTITY(1,1)" : "");
4

7 回答 7

8

添加括号:

script.Append("sometext" + ((dbInfo.IsIdentity) ? " IDENTITY(1,1)" : ""));
于 2009-01-22T18:11:30.897 回答
4

那这个呢?

script.Append( "sometext" );
script.Append( dbInfo.IsIdentity ? " IDENTITY(1,1)" : "" );
于 2009-01-22T18:13:15.340 回答
3

除了说明如果您有一个字符串生成器,您应该使用它来连接字符串。

也就是说,下面的代码应该可以工作。

script.Append("sometext");
script.Append(dbInfo.IsIdentity ? " IDENTITY(1,1)" : "");

在这种特殊情况下,您还可以这样做:

script.Append("sometext");
if(dbInfo.IsIdentity) script.Append(" IDENTITY(1,1)");
于 2009-01-22T18:14:11.000 回答
3

额外的括号甚至更好地使用 AppendFormat

script.AppendFormat("sometext{0}", dbInfo.IsIdentity ? " IDENTITY(1,1)" : "");
于 2009-01-22T18:15:11.153 回答
2

只是预感,但我认为您需要更多括号:

script.Append("sometext" + ((dbInfo.IsIdentity) ? " IDENTITY(1,1)" : ""));

为了便于阅读,我会敦促您使用临时变量。

于 2009-01-22T18:11:56.387 回答
0

首先,我会尝试将 if/then/else 包含在一组括号中,看看是否能解决问题。评估该表达式的顺序可能有问题。

于 2009-01-22T18:12:21.627 回答
0

一个快速的建议:如果你正在生成这样的 SQL,你可能有更好的时间使用像StringTemplate这样的模板来生成它,而不是使用直接的 C#。

于 2009-01-22T18:16:53.087 回答