Modo corretto per sfuggire ai caratteri in un’espressione di filtro DataTable

Vorrei sapere se esiste una funzione per l’escape dei valori letterali stringa per le espressioni filtro. per esempio:

DataTable.Select(String.Format("[name] = '{0}'", MyName)) 

Se MyName contiene “o un numero di altri caratteri chiave viene generata un’eccezione. La documentazione Microsoft indica che questi caratteri dovrebbero essere correttamente scappati, tuttavia c’è un po ‘di confusione su come farlo.

Ho provato a sostituire ‘with \’ e anche [‘] come indicato nella documentazione, tuttavia la query non riesce ancora.

Grazie molto

Sfuggi alla singola citazione “raddoppiandola in” “. Escape *% [] caratteri avvolgendo in []. per esempio

 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) + "'"); } 

Grazie agli esempi qui

Se sostituisco “con due singoli”, la query funziona.

  ///  /// If a pattern in a LIKE clause contains any of these special characters * % [ ], those characters must be escaped in brackets [ ] like this [*], [%], [[] or []]. /// If the pattern is not in a like clause then you can pass valueIsForLIKEcomparison = false to not escape brackets. /// Examples: /// - strFilter = "[Something] LIKE '%" + DataTableHelper.EscapeLikeValue(filterValue) + "%'"; ///  /// http://www.csharp-examples.net/dataview-rowfilter/ ///  /// LIKE filterValue. This should not be the entire filter string... just the part that is being compared. /// Whether or not the filterValue is being used in a LIKE comparison. ///  public static string EscapeFilterValue(string filterValue, bool valueIsForLIKEcomparison = true) { string lb = "~~LeftBracket~~"; string rb = "~~RightBracket~~"; filterValue = filterValue.Replace("[", lb).Replace("]", rb).Replace("​*", "[*​]").Replace("%", "[%]").Replace("'", "''"); if (valueIsForLIKEcomparison) { filterValue = filterValue.Replace(lb, "[").Replace(rb, "]"); } else { filterValue = filterValue.Replace(lb, "[[]").Replace(rb, "[]]"); } return filterValue; }