【问题标题】:Linq dynamic having issue with double quoteLinq 动态有双引号问题
【发布时间】:2020-01-24 16:39:35
【问题描述】:

我是 using System.Linq.Dynamic; 来生成动态 linq 查询,从数据库上下文中提取记录。

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

我关注了 Stack Overflow 现有解决方案 dynamiclinq-escaping-double-quotes-inside-strings,但它没有帮助,因为我想使用 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();

一旦我执行上面的查询,它就会抛出')' or operator expected 的错误。但是根据上面的 where 子句,它看起来所有的括号都很好,不确定动态查询 dll 是否有任何问题。

感谢您的建议。

【问题讨论】:

    标签: sql-server linq dynamic dynamic-linq


    【解决方案1】:

    您需要转义转义符号\

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

    【讨论】:

    • 如果我转义转义符号而不是 whereClause 它本身不是有效的字符串,因为之后它包含双引号。它给出了编译时错误。
    • 谢谢马克。我尝试使用新的编辑版本。只有参数化解决方案对我有用。对于第一个解决方案,我仍然看到错误为')' or ',' expected
    • 我还是不明白为什么第一个版本不适合你。您确定您完全按原样复制和粘贴它吗?无论如何,如果您对答案感到满意,请不要忘记投票并接受它作为答案。
    • 是的,当然...但是我正在寻找一种适用于第一个版本的解决方案,因为我有多个自动完成功能,其中可能包含单个或多个选择,它会创建多个 AND/OR 运算符,因此我们使用参数化版本需要修改整个逻辑,这对我来说将是很大的变化。第一个版本的任何帮助都对我有帮助。
    • 我扩展了第二个解决方案,使其适用于 N 个参数 var dic = new Dictionary<string, object> { { "@0", "\"D\"" }, { "@1", "\"6\"\" WHITE COLOR" } }; object[] values = dic.Values.ToArray();,最后将值作为参数传递 var result = context.Product.Where(whereClause, values).ToList();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多