EasyQuery - обернуть все столбцы в операторе выбора в скобках
У меня есть простой код запроса, который генерирует динамический оператор SQL:
//Model is loaded with "model.LoadFromConnection"
var EasyQueryCachedObject = new DbQuery();
EasyQueryCachedObject.Model = model; //Specified before
EasyQueryCachedObject.Model.Description = "XXX";
EasyQueryCachedObject.Formats.SetDefaultFormats(FormatType.MsSqlServer);
... //More logic to form query
var builder = new SqlQueryBuilder(EasyQueryCachedObject);
if (builder.CanBuild)
{
builder.BuildSQL();
var SQLQuery = builder.Result.SQL;
var QueryXML = builder.Result.Query.SaveToString();
}
Проблема в том, что я запрашиваю таблицы, которые генерируют SQL, например:
SELECT Entry No
,Item No
,Open
FROM.[dbo].[DataImport_2013]
Это не удается, потому что имена столбцов содержат зарезервированные слова / пробелы, как я могу получить EasyQuery, чтобы заключить все столбцы в квадратные скобки, как показано ниже?
SELECT [Entry No ]
,[Item No ]
,[Open]
FROM.[dbo].[DataImport_2013]
Очевидно, что решение, использующее встроенный параметр EasyQuery, было бы предпочтительным, но если это невозможно, возможно, какое-то регулярное выражение или постмодельная совокупность тоже могут сработать, на самом деле я открыт для любого решения, которое бы удовлетворяло эту потребность.
Обновление 1
Пробовал несколько вещей, в том числе "QuoteColumnAlias", сгенерированный запрос похож на следующее:
SELECT DataImport_2018."Entry No " AS "DataImport_2018 Entry No",
DataImport_2018."Item No " AS "DataImport_2018 Item No",
DataImport_2018.Open AS "DataImport_2018 Open"
FROM dbo.DataImport_2018 AS DataImport_2018
Все еще ошибки в резервном слове "открыть", так или иначе мне нужно получить кавычки, чтобы покрыть все столбцы, а не только те, которые с пробелами...
2 ответа
@Sergiy комментарий был чрезвычайно полезен, и я нашел способ сделать это после загрузки модели:
foreach (var column in EasyQueryCachedObject.Columns)
{
if (column.Expr.GetType() == typeof(DbEntityAttrExpr))
{
((DbEntityAttrExpr)column.Expr).Attribute.Quote = true;
}
}
Кажется, работает, все столбцы правильно упакованы и запрос выполняется без ошибок.
Есть Formats
свойство класса SqlQueryBuilder, которое включает QuoteColumnAlias
вариант. Включите его, чтобы SqlQueryBuilder использовал псевдонимы столбцов в кавычках (или в скобках).
builder.Formats.QuoteColumnAlias = true;
build.BuildSQL();
. . . . .