Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Linq dynamic存在双引号问题_Sql Server_Linq_Dynamic_Dynamic Linq - Fatal编程技术网

Sql server Linq dynamic存在双引号问题

Sql server Linq dynamic存在双引号问题,sql-server,linq,dynamic,dynamic-linq,Sql Server,Linq,Dynamic,Dynamic Linq,我正在使用System.Linq.Dynamic生成动态linq查询,其中featch记录来自db上下文 我为动态linq生成了字符串格式的where子句,若输入并没有任何双引号,它就可以完美地工作。然而,一旦输入字符串包含双引号,它就会抛出错误 我遵循了现有的堆栈溢出解决方案,但它并没有帮助,因为我想使用LIKE运算符 我在where子句中使用了Contains条件,因为我需要LIKE运算符进行查询。请遵循下面的示例代码 //name should contains "6"" WHITE C

我正在
使用System.Linq.Dynamic
生成动态linq查询,其中featch记录来自db上下文

我为动态linq生成了字符串格式的where子句,若输入并没有任何双引号,它就可以完美地工作。然而,一旦输入字符串包含双引号,它就会抛出错误

我遵循了现有的堆栈溢出解决方案,但它并没有帮助,因为我想使用LIKE运算符

我在where子句中使用了Contains条件,因为我需要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();

一旦我执行了上面的查询,它就会抛出错误作为
)”或预期的运算符。但根据上面的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();

如果我转义转义符号than where子句,它本身就是无效字符串,因为在此之后它包含双引号。它给出了编译时错误。谢谢马克。我尝试了新编辑的版本。只有参数化解决方案适合我。对于第一个解决方案,我仍然将错误视为
)”或“,”预期的
,我仍然不理解为什么第一个版本不适合您。你确定你复制并粘贴了它吗?无论如何如果您对答案感到满意,请不要忘记投票并将其作为答案接受。是的,当然……但我正在寻找一种适用于第一个版本的解决方案,因为我有多个自动完成,其中可能包含单个或多个选择,这会创建多个和/或运算符,因此我们需要修改参数化版本这对我来说将是一个巨大的变化。第一个版本的任何帮助都对我很有帮助。我扩展了第二个解决方案,使其适用于N个参数
var dic=new Dictionary{{0',“\'D\”“},{@1',“\'6\'”\'WHITE COLOR};object[]values=dic.values.ToArray();
,最后将值作为params
var result=context.Product.Where传递(whereClause,values).ToList();