Использование логического выражения в StringBuilder - PullRequest
1 голос
/ 22 января 2009

Я использую строитель строк для создания некоторых сценариев SQL. У меня есть несколько логических свойств, которые я хотел бы проверить, а затем вывести другой текст, основанный на true / false. Ниже приведен синтаксис C # при назначении значения переменной, но он не работает в данной конкретной ситуации. Есть идеи?

Что я привык делать:

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

Попытка дублировать то же самое внутри метода StringBuilder, но это не работает ..

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

Ответы [ 7 ]

8 голосов
/ 22 января 2009

Добавить скобки:

script.Append("sometext" + ((dbInfo.IsIdentity) ? " IDENTITY(1,1)" : ""));
4 голосов
/ 22 января 2009

Как насчет этого?

script.Append( "sometext" );
script.Append( dbInfo.IsIdentity ? " IDENTITY(1,1)" : "" );
3 голосов
/ 22 января 2009

Дополнительные скобки или еще более приятное использование AppendFormat

script.AppendFormat("sometext{0}", dbInfo.IsIdentity ? " IDENTITY(1,1)" : "");
3 голосов
/ 22 января 2009

Кроме заявления о том, что если у вас есть строитель строк, вы должны использовать его для объединения строк.

Тем не менее, код ниже должен работать.

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

В этом конкретном случае вы также можете сделать:

script.Append("sometext");
if(dbInfo.IsIdentity) script.Append(" IDENTITY(1,1)");
2 голосов
/ 22 января 2009

Просто догадка, но я думаю, вам нужно еще несколько скобок:

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

Я бы настоятельно рекомендовал вам использовать временную переменную для удобства чтения.

0 голосов
/ 22 января 2009

Быстрое предложение: если вы генерируете такой SQL-код, вам лучше использовать шаблон как StringTemplate , чтобы генерировать его по сравнению с прямым C #.

0 голосов
/ 22 января 2009

Во-первых, я бы попытался обернуть if / then / else в набор скобок и посмотреть, решит ли это проблему. Это может быть проблема с порядком, в котором это выражение оценивается.

...