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();
.   .   .   .   .
Другие вопросы по тегам