这是我的代码,我想检查数据表中是否存在输入代码:
Dim dtColor = New DataTable
dtColor.Columns.Add("Code")
Dim dr=dtColor.newrow
dr("Code")="AB%M"
dtColor.Rows.Add(dr)
dr=dtColor.newrow
dr("Code")="BCT%"
dtColor.Rows.Add(dr)
Dim strCode="AB100Z"
Dim Arr=dtColor.Select(String.Format("'{0}' like Code ", strCode))
但是发生错误:
Error in Like operator: the string pattern 'AB%M' is invalid.
如何在2个数据表字符串之间选择类似%的数字?
答案 0 :(得分:2)
您可以结合使用Regex.IsMatch
和LINQ to Dataset来解决问题,因为LIKE
中的DataTable
运算符仅在语句的开头或结尾支持通配符,如以下示例所示:
Dim Arr = dtColor.AsEnumerable().Where(Function (row)
Dim value = row.Field(Of String)("Code")
Return Regex.IsMatch(value, "AB.*M")
End Function).ToArray()
如果您想在所有位置使用通配符,例如%AB%M%
,只需通过添加更多.*
代替%
来替换正则表达式即可:
Dim Arr = dtColor.AsEnumerable().Where(Function (row)
Dim value = row.Field(Of String)("Code")
Return Regex.IsMatch(value, ".*AB.*M.*")
End Function).ToArray()
答案 1 :(得分:0)
Oracle和DB2具有REGEXP_LIKE
,MySQL具有RLIKE。您可以使用符合您情况的正则表达式进行搜索。对于VB,您可以找到一种使用REGEX的解决方法,如下所述(reference can be found here)
Regex rx = new Regex(......, RegexOptions.Compiled );
foreach (DataRow row in dt.Rows)
{
if (rx.IsMatch(row.Field<String>("myRow")))
{
........
}
}