Linq динамическая проблема с двойной кавычкой - PullRequest
0 голосов
/ 24 сентября 2019

Я using System.Linq.Dynamic; для генерации динамического запроса linq, который выбирает записи из контекста БД.

Я генерирую предложение where в строковом формате для динамического linq. Это прекрасно работает, если входные данные не содержат двойных кавычек.Однако он выдает ошибку, когда входная строка содержит двойные кавычки.

Я следовал за существующим решением переполнения стека dynamiclinq-escaping-double-quotes-inside-strings , но это не помогло, потому что я хотелиспользуйте оператор LIKE.

Я использую Содержит условие в предложении where, потому что мне нужен оператор LIKE для запроса.Пожалуйста, следуйте приведенному ниже образцу кода ...

//name should contains  "6"" WHITE COLOR

var whereClause = "(!flag.Contains(\"D\")) AND (Name.Contains(\"\"6\"\" WHITE COLOR\"\"))";

var result = context.Product.Where(whereClause).ToList();

Как только я выполню запрос выше, он выдаст ошибку как ')' or operator expected.Но в соответствии с приведенным выше предложением, где это выглядит, все скобки в порядке, не уверен, что это какая-то проблема с динамическим запросом DLL.

Спасибо за любой совет.

1 Ответ

0 голосов
/ 24 сентября 2019

Вам необходимо экранировать символ выхода \.

//name should contains  "6"" WHITE COLOR

var whereClause = "(!flag.Contains(\"D\")) AND (Name.Contains(\"\\\"6\\\"\\\" WHITE COLOR\"))";

var result = context.Product.Where(whereClause).ToList();

Или использовать параметризацию.

//name should contains  "6"" WHITE COLOR

var flag = "\"D\"";
var name = "\"6\"\" WHITE COLOR";
var whereClause = "(!flag.Contains(@0)) AND (Name.Contains(@1))";

var result = context.Product.Where(whereClause, @0, @1).ToList();
...