【发布时间】: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