ormlite-servicestack,C#,ormlite Servicestack" /> ormlite-servicestack,C#,ormlite Servicestack" />

C# SqlExpression创建上层SQL查询

C# SqlExpression创建上层SQL查询,c#,ormlite-servicestack,C#,ormlite Servicestack,我有以下代码: SqlExpression<Postcodes> sqlExpression = db.From<Postcodes>() .Where(x => x.CityId.StartsWith(searchString)) .OrderBy(x => x.CityId) .ThenBy(x => x.ZipCode)

我有以下代码:

SqlExpression<Postcodes> sqlExpression = db.From<Postcodes>()
                    .Where(x => x.CityId.StartsWith(searchString))
                    .OrderBy(x => x.CityId)
                    .ThenBy(x => x.ZipCode)
                    .Take(take);
为什么即使我没有使用
x.CityId.ToUpper()
,它也会生成“upper”

更新: 当我使用
“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%
看起来默认情况下它使用不区分大小写的匹配

为什么默认值不区分大小写?我如何强制它进行区分大小写的匹配

更新:
正如Gabitu所指出的,它只是使列名大写,并不影响查询。将列名置于大写有什么意义?

我认为它将列名置于大写,因此不会影响您的查询

查询将类似于以下内容:

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'

我想说的是,这是在试图成为一个不敏感的案例!但是,使用列名大写有什么意义呢?请检查您的列是否不区分大小写:从信息模式中选择列名称、排序规则名称。列中,表名称='Postcodes'和字符集名称不为空,表模式='search'显示“SQL拉丁1\U General\U CP1\U CI\U AS”
SELECT COLUMN_NAME, COLLATION_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE 
   TABLE_NAME = 'Postcodes' AND 
   CHARACTER_SET_NAME IS NOT NULL AND 
   TABLE_SCHEMA = 'search'