SqlExpression Создание верхнего SQL-запроса - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть следующий код:

SqlExpression<Postcodes> sqlExpression = db.From<Postcodes>()
                    .Where(x => x.CityId.StartsWith(searchString))
                    .OrderBy(x => x.CityId)
                    .ThenBy(x => x.ZipCode)
                    .Take(take);

Когда я смотрю в отладке, я вижу, что sqlExpression.BodyExpression имеет:

FROM "search"."Postcodes"
WHERE upper("CityId") like @0

Почему он генерирует даже "верхний"хотя я не использовал x.CityId.ToUpper()?

Обновление: Когда я использую "nort" в качестве ввода, я вижу это в выводе отладки:

2018-11-23 07:37:22,781 [21] DEBUG ServiceStack.OrmLite.OrmLiteReadCommandExtensions [(null)] - SQL: SELECT TOP 100 "ZipCode", "CityId", "StateId" 
FROM "search"."Postcodes"
WHERE upper("CityId") like @0
ORDER BY "CityId", "ZipCode"
PARAMS: @0=NORT%

Похоже, по умолчанию используется сопоставление без учета регистра.

Почему не учитывается регистр по умолчанию и как я могу заставить его выполнить сопоставление с учетом регистра?

Обновление: Как отметил Габиту, он просто вводит имя столбца в верхнем регистре и не влияет на запрос.Какой смысл делать имя столбца заглавными?

1 Ответ

0 голосов
/ 23 ноября 2018

Я думаю, что это делает Upper для имени вашего столбца, так что это никак не повлияет на ваш запрос.

Запрос будет выглядеть примерно так:

SELECT * 
FROM "search"."Postcodes" 
WHERE CITYID like @0
ORDER BY "CityId"

Возможноделает его заглавным, потому что ваш столбец нечувствителен к регистру.Проверьте, является ли ваш столбец чувствительным или нечувствительным, с помощью следующей команды:

SELECT COLUMN_NAME, COLLATION_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE 
   TABLE_NAME = 'Postcodes' AND 
   CHARACTER_SET_NAME IS NOT NULL AND 
   TABLE_SCHEMA = 'search'
...