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();
,最后将值作为paramsvar result=context.Product.Where传递(whereClause,values).ToList();