【问题标题】:EF Core postgresql string compare (case-insensitive)EF Core postgresql 字符串比较(不区分大小写)
【发布时间】:2021-05-11 01:41:41
【问题描述】:

我使用的是 EF Core 5。因为 Postgresql 不区分大小写。

以下是两种方法

方法#1:

 var existingEntity = await _unitOfWork.Banks.FirstOrDefautAsync(x => (x.Code.ToLower() == bank.Code.ToLower()));

方法#2:

 var existingEntity = await _unitOfWork.Banks.FirstOrDefautAsync(x => (EF.Functions.ILike(x.Code, bank.Code));

我需要检查表中是否存在给定代码(不区分大小写)。上述两种方法中哪种方法最好/最快,或者 EF Core 5 中是否有任何替代方法?

谢谢

【问题讨论】:

    标签: postgresql asp.net-core entity-framework-core


    【解决方案1】:

    我最近遇到了同样的问题。这是我尝试过的一些选项; 1-数据库或实体类的每个属性上的不区分大小写的排序规则。 2-Citext 类型 3-ILIKE 每个 linq 查询的 4-ToLower() 方法

    1 有很多缺点,例如您不能在查询中使用各种 sql 函数(ILIKE、LIKE、STRPOS(Contains()...)。那是因为您不能在非确定性排序规则中使用这些函数.

    2 有一些性能问题(你可以从文档中阅读,我阅读了很多)

    3 ILIKE 并不比 '=' 检查性能好

    4 我个人选择这个是因为它最适合我。此外,如果您需要为需要不区分大小写的列建立索引,您可以使用 functions(LOWER(column_name)) 进行索引

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多