【问题标题】:Forcing Case Insensitive String.Contains in Entity Framework Core在实体框架核心中强制不区分大小写 String.Contains
【发布时间】:2018-03-31 10:35:22
【问题描述】:

有没有办法强制 LINQ to SQL 执行不区分大小写的包含?

我正在 Entity Framework Core 上使用 PostgreSQL。

【问题讨论】:

  • 最直接的方式是ctx.Table.Where(c => c.Column.ToLower().Contains(searchTerm.ToLower())
  • @Evk 该解决方案有效,但如果索引相同的字符串,它将导致数据库跳过索引并执行表查找。需要记住的一点。
  • @aevitas 没有必要。 Postgesql 允许在表达式上定义索引,因此您可能在 lower(YourColumn) 上有索引,这样的索引将用于上面的查询。当然,仍然值得牢记。

标签: c# .net string entity-framework-core case-insensitive


【解决方案1】:

Case insensitive name of tables and properties in Entity Framework 7

参考上面的答案,没有。没有办法在更低的级别进一步加载大小写敏感性检查。你必须完全按照这个人所做的:

How do I make contains case-insensitive in ef core 2?

这是最新 LINQ 语法的示例。

var tickerObj = _unitOfWork.GetRepository<CurrencyPair>()
                .GetQueryable()
                // .Where() and .Include() omitted for brevity
                .SingleOrDefault(cp => string.Concat(
                    cp.PartialCurrencyPairs.FirstOrDefault(pcp => pcp.IsMain).Currency.Abbrv,
                    cp.PartialCurrencyPairs.FirstOrDefault(pcp => !pcp.IsMain).Currency.Abbrv)
                    .Equals(ticker, StringComparison.InvariantCultureIgnoreCase)
                && cp.CurrencySource.Abbreviation.Equals(exchangeAbbrv, StringComparison.InvariantCultureIgnoreCase));

关注 SingleOrDefault() 部分:

cp.CurrencySource.Abbreviation.Equals(exchangeAbbrv, StringComparison.InvariantCultureIgnoreCase)

【讨论】:

    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2018-11-18
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多