【问题标题】:Trying to compare the two strings inside the linq query尝试比较 linq 查询中的两个字符串
【发布时间】:2021-11-15 04:38:28
【问题描述】:

我正在尝试使用EF Functions 之类的方法检查两个字符串的相等性,但是它以某种方式失败并且在空格上为空。 这两个字符串如下所示,这里你可以观察到唯一的区别是SPACE的情况

displayName 是 L1-008-5 SPACE,我已将 Displayname 存储在空间标识对象中,如下所示 L1-008-5 Space

L1-008-5 SPACE 和 L1-008-5 Space

这里是代码

 var space = dbContext.Spaces.SingleOrDefault(a => EF.Functions.Like(a.SpaceIdentity.DisplayName, displayName));

我也尝试了以下选项

dbContext.Spaces.SingleOrDefault(s => s.SpaceIdentity.DisplayName.Equals(displayName, StringComparison.OrdinalIgnoreCase));

dbContext.Spaces.SingleOrDefault(s => string.Equals(s.SpaceIdentity.DisplayName,displayName, StringComparison.OrdinalIgnoreCase));

以上都不起作用,并且在空格上为空。

谁能指出我在上述比较中做错的正确方向。

非常感谢!

【问题讨论】:

  • 您需要提供一些示例输入和输出。另外,displayName 中的内容是什么?
  • @DavidG 我修改了问题
  • 所以您正在寻找不区分大小写的搜索?
  • 您的数据库对 DisplayName 字段的排序规则设置是什么?
  • LIKE 查询受数据库排序规则设置的影响,设置为什么?

标签: c# entity-framework linq


【解决方案1】:

假设您正在为 EF Core 使用 Npgsql.EntityFrameworkCore.PostgreSQL 提供程序,您应该可以访问 ILike 方法,该方法不区分大小写 LIKE。这意味着您可以使用此代码:

var space = dbContext.Spaces
    .SingleOrDefault(a => 
        EF.Functions.ILike(a.SpaceIdentity.DisplayName, displayName));
//                   ^^^^^

【讨论】:

  • 行得通,感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多