个人资料

跳过导航链接首页 > 博客列表 > 博客正文

EF Core 查询匹配或忽略大小写

:

前言:

不同数据库处理文本的方式差异很大;例如,一些数据库默认区分大小写(例如 Sqlite、PostgreSQL),但其他数据库不区分大小写(SQL Server、MySQL)。 

此外,由于索引的使用,区分大小写和类似方面可能会对查询性能产生深远的影响:虽然在区分大小写的数据库中使用 string.ToLower 强制实施不区分大小写的比较很有诱惑力,但这样做可能会阻止应用程序使用索引。

---------

对于sqlite 默认匹配大小写 在efcore中提供了EF.Functions.Collate方法,指定排序规则。其中“NOCASE”是sqlite中忽略大小写规则的字符串。

                    resultAccount = data_context.Accounts.FirstOrDefault(
                        acc => 
                            (
                            (EF.Functions.Collate(acc.gameName, "NOCASE") == GameName)&&
                            (EF.Functions.Collate(acc.tagLine, "NOCASE") == TagLine)
           
                            )
                    );
对于sql-server 可以使用一样的方法,但排序规则不同。下面的示例让sql-server对大小写敏感。


var customers = context.Customers .Where(c => EF.Functions.Collate(c.Name, "SQL_Latin1_General_CP1_CS_AS") == "John") .ToList();

sql-server 默认使用  SQL_Latin1_General_CP1_CI_AS 不匹配大小写。

---------

参考:https://learn.microsoft.com/ef/core/miscellaneous/collations-and-case-sensitivity

songshizhao
最初发表2025/1/14 16:16:08 最近更新2025/1/14 16:16:35 70
为此篇作品打分
10