我正在使用字符串构建器来构建一些SQL脚本。我有一些布尔属性,我想测试,然后根据true / false输出不同的文本。在为变量赋值时,我给你了下面的C#语法,但它不适用于这种特殊情况。有什么想法吗?
我以前做过的事情:
string someText = (dbInfo.IsIdentity) ? "First Option" : "Second Option";
尝试在StringBuilder方法中复制相同的东西,但这不起作用..
script.Append("sometext" + (dbInfo.IsIdentity) ? " IDENTITY(1,1)" : "");
答案 0 :(得分:8)
添加括号:
script.Append("sometext" + ((dbInfo.IsIdentity) ? " IDENTITY(1,1)" : ""));
答案 1 :(得分:4)
这个怎么样?
script.Append( "sometext" );
script.Append( dbInfo.IsIdentity ? " IDENTITY(1,1)" : "" );
答案 2 :(得分:3)
另外说明如果你有一个stringbuilder,你应该用它来连接字符串。
那就是说,下面的代码应该可以工作。
script.Append("sometext");
script.Append(dbInfo.IsIdentity ? " IDENTITY(1,1)" : "");
在这种特殊情况下,你也可以这样做:
script.Append("sometext");
if(dbInfo.IsIdentity) script.Append(" IDENTITY(1,1)");
答案 3 :(得分:3)
额外括号甚至更好用AppendFormat
script.AppendFormat("sometext{0}", dbInfo.IsIdentity ? " IDENTITY(1,1)" : "");
答案 4 :(得分:2)
只是预感,但我认为你需要更多括号:
script.Append("sometext" + ((dbInfo.IsIdentity) ? " IDENTITY(1,1)" : ""));
为了便于阅读,我建议您使用临时变量。
答案 5 :(得分:0)
首先,我会尝试将if / then / else包装在一组括号中,看看是否能解决问题。这可能是评估表达式的顺序的问题。
答案 6 :(得分:0)
快速建议:如果您正在生成这样的SQL,那么您可以更好地使用StringTemplate之类的模板生成它而不是使用直接C#。