【问题标题】:LINQ expression String.Contains doesn't workLINQ 表达式 String.Contains 不起作用
【发布时间】:2019-01-08 22:44:25
【问题描述】:

我有一个 Kendo Grid,它必须按列过滤。它适用于 IsEqualTo、IsNotEqualTo、StartsWith 和 EndsWith 案例,但不适用于 Contains 或 DoesNotContain 案例。

我的代码是这样的:

switch (ertesitettDescriptor.Operator)
{
    case FilterOperator.IsEqualTo:
         res = res.Where(m => m.ErtesitendoSzerv.Nev.ToLower() == filterValue.ToLower());
         break;
    case FilterOperator.IsNotEqualTo:
         res = res.Where(m => !(m.ErtesitendoSzerv.Nev.ToLower() == filterValue.ToLower()));
         break;
    case FilterOperator.Contains:
         res = res.Where(m => m.ErtesitendoSzerv.Nev.ToLower().Contains(filterValue.ToLower()));
         break;
    case FilterOperator.DoesNotContain:
         res = res.Where(m => !(m.ErtesitendoSzerv.Nev.ToLower().Contains(filterValue.ToLower())));
         break;
    case FilterOperator.StartsWith:
         res = res.Where(m => (m.ErtesitendoSzerv.Nev.ToLower().StartsWith(filterValue.ToLower())));
         break;
    case FilterOperator.EndsWith:
         res = res.Where(m => (m.ErtesitendoSzerv.Nev.ToLower().EndsWith(filterValue.ToLower())));
         break;
    default:
         return new JavaScriptResult { Script = "kendo.alert('A szűrés módja nem támogatott!')" };
}

一切正常,所以值没问题,但.Contains 方法不返回任何记录。

【问题讨论】:

  • “不起作用”是什么意思?它会导致抛出异常吗?它是否遗漏了您认为应该包括在内的记录?它是否包括您认为应该排除的记录?它是否正确过滤,但在客户端而不是服务器端?
  • 您的标题和标签都具有误导性。您使用的是 LINQ 而不是实体框架。
  • 抱歉,我已经更新了。我的意思是它不会返回任何记录。一定有一些,因为其他四个显示它们,但包含不显示。
  • OT 大多数方法都有一个 StringComparison 参数的重载 - 那么你不需要所有这些 .ToLower()s。对于 == 有 string.Equals
  • 您的输入是特定于文化的字符串吗?那么string.compare 不支持文化敏感比较。您可以创建自己的扩展方法进行比较。参考这里。 docs.microsoft.com/en-us/dotnet/api/…

标签: asp.net-mvc linq kendo-grid contains


【解决方案1】:

如果您使用 LINQ to SQL,它会自动忽略区分大小写。无需转换为小写或大写即可获得结果。

res = res.Where(m => !(m.ErtesitendoSzerv.Nev.Contains(filterValue)));

【讨论】:

    【解决方案2】:

    只是冒昧地清理了一点代码,并将StringComparison 添加到您的过滤器中。我认为 StringComparison 可以解决您的问题,因为您不再需要使用 ToLower()。

    StringComparison comp = StringComparison.OrdinalIgnoreCase;
    
    switch (ertesitettDescriptor.Operator)
    {
        case FilterOperator.IsEqualTo:
             res = res.Where(m => m.ErtesitendoSzerv.Nev.Equals(filterValue, comp);
             break;
        case FilterOperator.IsNotEqualTo:
             res = res.Where(m => !m.ErtesitendoSzerv.Nev.Equals(filterValue, comp);
             break;
        case FilterOperator.Contains:
             res = res.Where(m => m.ErtesitendoSzerv.Nev.Contains(filterValue, comp));
             break;
        case FilterOperator.DoesNotContain:
             res = res.Where(m => !m.ErtesitendoSzerv.Nev.Contains(filterValue, comp));
             break;
        case FilterOperator.StartsWith:
             res = res.Where(m => m.ErtesitendoSzerv.Nev.StartsWith(filterValue, comp));
             break;
        case FilterOperator.EndsWith:
             res = res.Where(m => m.ErtesitendoSzerv.Nev.EndsWith(filterValue, comp));
             break;
        default:
             return new JavaScriptResult { Script = "kendo.alert('A szűrés módja nem támogatott!')" };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2012-09-08
      • 1970-01-01
      • 2021-04-07
      相关资源
      最近更新 更多