Оба следующих двух формата работают правильно. Суть проблемы заключается в том, какой тип возвращается ExecuteQuery.
SELECT 'true' фактически возвращает строку, а не bool - таким образом, при использовании этого формата переменная результата ExecuteQuery также должна быть строкой (а не bool)
И при использовании SELECT 1 в соответствии с рекомендациями @Eben Roux и @Anders Abel, результирующая переменная ExecuteQuery должна быть int (а не bool)
static bool TableExists(string tableNameAndSchema)
{
string checkTable =
String.Format(
"IF OBJECT_ID('{0}', 'U') IS NOT NULL SELECT 'true' ELSE SELECT 'false'",
tableNameAndSchema);
IEnumerable<string> result = db.ExecuteQuery<string>(checkTable);
return Convert.ToBoolean(result.First());
}
static bool TableExists2(string tableNameAndSchema)
{
string checkTable =
String.Format(
"IF OBJECT_ID('{0}', 'U') IS NOT NULL SELECT 1 ELSE SELECT 0",
tableNameAndSchema);
IEnumerable<int> result = db.ExecuteQuery<int>(checkTable);
return Convert.ToBoolean(result.First());
}
Спасибо @Eben Roux и @Anders Abel, ответы которых указали мне на окончательное решение (я). Я отметил ваши ответы как полезные, поскольку они направили меня в правильном направлении, чтобы получить окончательный ответ - спасибо, ребята :))