代码之家  ›  专栏  ›  技术社区  ›  kjv

.NET Framework DataTable.Select(String)方法(当筛选器表达式包含“或”时)

  •  1
  • kjv  · 技术社区  · 15 年前

    在.NET Web应用程序中,我使用 public datarow[]select(字符串filterexpression) 方法在很多地方。由于最后一分钟的原因,诸如“和”之类的更改字符现在是有效输入。我有哪些选择,是否有一种方法可以适当地更改filterexpression并保留数据表上的select功能,我可以切换到linq?

    2 回复  |  直到 14 年前
        1
  •  1
  •   David Morton    15 年前

    通过将表达式文本中的单引号(“)加倍来对其进行转义:“”

    不需要在字符串文本中转义双引号(“)。字符串文本由单引号绑定,因此双引号只需是标准的C转义字符:“”(如果在以@符号开头的逐字字符串中,则为“”)

    this link 更多信息。

        2
  •  0
  •   Rory    14 年前

    通过将单引号加倍到“”来转义单引号。通过在[]中换行来转义*%[]个字符。 例如

    private string EscapeLikeValue(string value)
    {
        StringBuilder sb = new StringBuilder(value.Length);
        for (int i = 0; i < value.Length; i++)
        {
            char c = value[i];
            switch (c)
            {
                case ']':
                case '[':
                case '%':
                case '*':
                    sb.Append("[").Append(c).Append("]");
                    break;
                case '\'':
                    sb.Append("''");
                    break;
                default:
                    sb.Append(c);
                    break;
            }
        }
        return sb.ToString();
    }
    
    public DataRow[] SearchTheDataTable(string searchText)
    { 
         return myDataTable.Select("someColumn LIKE '" 
                                     + EscapeLikeValue(searchText) + "'");
    } 
    

    多亏了 examples here