我正在尝试在 C# DataTable 中查找模式。我基本上有我的代码,如下所示:
long count= table.Select("Col0 LIKE '%AA%ZZ%'").Count();
但是,我得到一个例外System.Data.EvaluateException: Error in Like operator: the string pattern '%AA%ZZ%' is invalid
.
我读到通配符只能在 C# select 语句的开头或结尾使用。有没有其他选择?
理想情况下,我不想自己编写一个遍历表每一行的循环。
您可以使用 Linq to DataSet 和正则表达式。
int count = table.AsEnumerable()
.Where(row =>
{
string value = row.Field<string>("Col0");
return Regex.IsMatch(value, ".*AA.*ZZ.*");
})
.Count();
只对字符串的开头方式(即末尾的%
)感兴趣,则可以使用此方法。假设您需要此条件:"LIKE 'Code02%'"
。为此,您可以使用:
long count = table.Select("Col0 >= 'Code02' AND Col0 < 'Code03'").Count();
此过滤器将返回具有 Code02
、Code020
、Code02AC
、Code02ZZZZZZZ
等值的行。
好的 既然你解释说 AA 和 ZZ 之间可能有其他东西,你正在尝试'%AA%ZZ%'(抛出错误),试试这个:
long count= table.Select("Col0 LIKE 'AA%' AND Col0 LIKE '%ZZ'").Count();
这将选择 Col0 以"AA"开头并以"ZZ"结尾的每一行,这意味着介于两者之间的任何内容都不会发挥任何作用。