2009-01-22 56 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#。