我正在尝试在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语句的开头或结尾使用。还有其他选择吗?
理想情况下,我不想写一个遍历表格每一行的循环。
答案 0 :(得分:1)
您可以将Linq用于DataSet和正则表达式。
int count = table.AsEnumerable()
.Where(row =>
{
string value = row.Field<string>("Col0");
return Regex.IsMatch(value, ".*AA.*ZZ.*");
})
.Count();
答案 1 :(得分:0)
如果您只对字符串的开始方式(即末尾的%
)感兴趣,则可以使用这种方法。假设您需要以下条件:"LIKE 'Code02%'"
。为此,您可以使用:
long count = table.Select("Col0 >= 'Code02' AND Col0 < 'Code03'").Count();
此过滤器将返回包含Code02
,Code020
,Code02AC
,Code02ZZZZZZZ
等值的行。
答案 2 :(得分:-1)
好你既然解释说AA和ZZ之间可能还有其他东西你正在尝试&#39;%AA%ZZ%&#39; (抛出错误),试试这个:
long count= table.Select("Col0 LIKE 'AA%' AND Col0 LIKE '%ZZ'").Count();
这将选择Col0以&#34; AA&#34;开头的每一行。与&#34; ZZ&#34;结束这意味着介于两者之间的任何事情都不起任何作用。