我using System.Linq.Dynamic;
生成动态 linq 查询,该查询从数据库上下文中记录。
我为动态linq生成字符串格式的where子句,如果输入没有任何双引号,它可以完美运行。但是,一旦输入字符串包含双引号,它就会引发错误。
我遵循了堆栈溢出现有的解决方案 dynamiclinq-escaping-double-quotes-inside-string,但它没有帮助,因为我想使用 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
。但是根据上面的 where 子句,它看起来所有括号都很好,不确定动态查询 dll 是否有任何问题。
谢谢你的任何建议。
您需要转义转义符号。
//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();