如何在DataTable DotNet中选择像列一样的值?

时间:2015-12-18 03:17:16

标签: .net vb.net

我的代码:

 Dim dt As New DataTable
     dt.Columns.Add("No")
     dt.Columns.Add("Col2")
      Dim dr = dt.NewRow
     dr("No") = 1
     dr("Col2") = "abc"
     dt.Rows.Add(dr)
 Dim strText="abcdes"
 For Each drow As DataRow In dt.Select(String.Format("'{0}' like '%' & Col2 & '%'", strText)) 
 //value of Col2 exist in strText
 Next

显示错误:

  

{“表达式包含不受支持的运算符   '&'。“} System.Data.EvaluateException

如何在DataTable DotNet中选择像列一样的值?

3 个答案:

答案 0 :(得分:1)

您应该使用+代替&并更正LIKE的格式:

String.Format(" '{0}' LIKE '%' + Col2 + '%' ", strText)

对于每一行,这将检查Col2中是否包含strText的值,它是否返回该行。

要检查Col2是否包含strText,您应该使用String.Format("Col2 LIKE '%{0}%'", strText)

示例

Dim foundRows() As DataRow
foundRows= dt.Select(String.Format(" '{0}' LIKE '%' + Col2 + '%' ", strText))
For Each dr As DataRow In foundRows
    'Do something
Next

要了解有关表达式语法的更多信息:

注意:

如果您没有获取DataRow列表,而是需要过滤DataTable,例如仅显示DataGridView中已过滤的行,请使用:

Me.DataGridView1.DataSource = dt
dt.DefaultView.RowFilter = String.Format("Col2 LIKE '%{0}%'", strText)

答案 1 :(得分:1)

在为LIKE条件构建正确的Filter值时,您必须处理特殊字符。

有一个例子here

public static string EscapeLikeValue(string valueWithoutWildcards)
{
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < valueWithoutWildcards.Length; i++)
  {
    char c = valueWithoutWildcards[i];
    if (c == '*' || c == '%' || c == '[' || c == ']')
      sb.Append("[").Append(c).Append("]");
    else if (c == '\'')
      sb.Append("''");
    else
      sb.Append(c);
  }
  return sb.ToString();
}

正如其他人提到的,你的语法看起来很奇怪,试试

dt.Select(String.Format("col2 LIKE '%{0}%'", EscapeLikeValue(strText))

答案 2 :(得分:-1)

您是否尝试过执行dt.AsEnumerable()并使用LINQ函数?

在你的情况下你可以做类似的事情

var dataRows = dt.AsEnumerable(); var matchingRows = dataRows.Where(e=>e.Row<string>("Col2").Contains(strText)).Select();

这将返回一个IEnumerable,它包含所有包含strText

值的行

阅读起来容易得多,而且更受欢迎。