首页 > 解决方案 > 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 是否有任何问题。

谢谢你的任何建议。

标签: sql-serverlinqdynamicdynamic-linq

解决方案


您需要转义转义符号\

//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();

推荐阅读