2009-01-22 62 views
1

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

我已经习惯了做什么:

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

试图复制一个StringBuilder方法中同样的事情,但是这是不工作..

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

回答

8

添加括号:

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

只是一个预感,但我认为你需要更多的支架:

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

为了便于阅读,我建议您使用一个临时变量。

0

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

4

这是怎么回事?

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

其他来自指出,如果你有一个StringBuilder你应该使用它来连接字符串。

这就是说,代码波纹管应该工作。

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

在这种特殊情况下,你也可以这样做:

script.Append("sometext"); 
if(dbInfo.IsIdentity) script.Append(" IDENTITY(1,1)"); 
3

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

script.AppendFormat("sometext{0}", dbInfo.IsIdentity ? " IDENTITY(1,1)" : ""); 
0

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