LINQ表达式String.Contains不起作用

时间:2018-08-01 11:19:38

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

我有一个Kendo网格,必须按一列进行过滤。它适用于IsEqualTo,IsNotEqualTo,StartsWith和EndsWith案例,但不适用于Contains或DidsNotContain案例。

我的代码如下:

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方法不会返回任何记录。

2 个答案:

答案 0 :(得分:0)

如果您使用LINQ to SQL,它将自动忽略大小写。您无需转换为小写或大写字母就可以实现结果。

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

答案 1 :(得分:0)

只需清理所有代码,然后将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!')" };
}