过滤器表达式包含'或'时的.Net Framework DataTable.Select(String)方法

时间:2010-02-25 12:12:03

标签: sql linq select datatable

在.Net Web应用程序中,我在许多地方使用 public DataRow [] Select(string filterExpression)方法。由于最后一分钟更改字符(如'和')现在是有效输入。我有什么选项,有没有办法以适当的方式更改filterExpression并仍保留数据表上的Select功能,我可以切换到LINQ ?

2 个答案:

答案 0 :(得分:1)

通过加倍表达文字来逃避单引号('):''

无需转义字符串文字中的双引号(“)。字符串文字由单引号绑定,因此双引号只需标准C#escaped:\”(或“”如果在逐字字符串中以@符号)

有关详细信息,请参阅this link

答案 1 :(得分:0)

通过将单引号加倍''来逃避单引号。通过包装在[]中转义*%[]个字符。 例如

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