sql-server - Linq 动态有双引号问题
问题描述
我using System.Linq.Dynamic;
要生成动态 linq 查询,该查询从 db 上下文中获取记录。
我为动态 linq 生成字符串格式的 where 子句,如果输入没有任何双引号,它可以完美地工作。但是,一旦输入字符串包含双引号,它就会抛出错误。
我遵循了 Stack Overflow 现有的解决方案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
。但是根据上面的 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();
推荐阅读
- java - com.google.wireless.android.sdk.stats.IntellijIndexingStats 构建 AWS sumerian java 项目时出错
- python-2.x - 为什么我的字节数组没有不同,即使 print() 说它们是不同的?
- java - 如何将 fxml 文件与 3d Box 和 PerspectiveCamera 结合使用
- javascript - 自动播放背景音乐不起作用。还包括静音按钮
- c++ - 仅使用 openCV 和 Qt 从嵌入式相机接收黑帧
- javascript - 添加 knex.js .andWhere() 是条件为真
- javascript - 如何从按钮中删除类并在 sweetalert2 中添加自定义类?
- angular - 从 Angular 材质文本区域向服务器 Http POST XML 数据
- angular - 上下文菜单未出现在正确的位置(角度)
- python-3.x - Python - PEP8 悬挂缩进错误消息