You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core中使用StringComparison.OrdinalIgnoreCase报错,如何实现忽略大小写字符串比较?

EF Core实现忽略大小写的字符串查询

EF Core无法直接翻译带StringComparison.OrdinalIgnoreCase参数的string.Equals方法,这是因为该参数对应的逻辑无法直接映射到通用SQL语法。以下是几种可行的解决方案:

方案1:使用ToLower()/ToUpper()统一大小写(跨数据库通用)

将查询双方的字符串转换为小写(或大写)后再比较,EF Core会自动将ToLower()翻译为数据库对应的内置函数(如SQL Server的LOWER()、PostgreSQL的lower()),确保查询能被正确转换为SQL执行。需注意处理str为null的情况,避免空引用异常:

public async Task<List<MyClass>> GetMyTaskAsync(string? str)
{   
    var lowerStr = str?.ToLower();

    var myVar = await (from e in _whDbContext.PluralizedMyClass
                       where (str == null && e.MyCol == null) || 
                             (str != null && e.MyCol != null && e.MyCol.ToLower() == lowerStr)
                       select e).ToListAsync();

    return myVar;
}

方案2:使用数据库特定的排序规则(精准匹配)

如果项目针对特定数据库(如SQL Server),可以利用数据库的排序规则实现忽略大小写的比较,这种方式比ToLower()更准确,能避免特殊字符转换时的问题。

以SQL Server为例,使用EF.Functions.Collate指定不区分大小写的排序规则:

public async Task<List<MyClass>> GetMyTaskAsync(string? str)
{   
    var myVar = await (from e in _whDbContext.PluralizedMyClass
                       where str == null ? e.MyCol == null : 
                             EF.Functions.Collate(e.MyCol, "SQL_Latin1_General_CP1_CI_AS") == str
                       select e).ToListAsync();

    return myVar;
}

说明:SQL_Latin1_General_CP1_CI_AS是SQL Server中常用的不区分大小写(CI)、区分重音(AS)的排序规则,可根据数据库配置调整为对应规则。

方案3:使用EF.Functions.Like(适用于模式匹配场景)

如果需要模糊匹配而非精确匹配,可结合统一大小写的方式使用EF.Functions.Like,精确匹配场景下前两种方案更合适:

public async Task<List<MyClass>> GetMyTaskAsync(string? str)
{   
    if (str == null)
        return await _whDbContext.PluralizedMyClass.Where(e => e.MyCol == null).ToListAsync();

    var lowerStr = str.ToLower();
    return await _whDbContext.PluralizedMyClass
        .Where(e => e.MyCol != null && EF.Functions.Like(e.MyCol.ToLower(), lowerStr))
        .ToListAsync();
}

内容的提问来源于stack exchange,提问作者Dev101684

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:34:55