0

我有这段代码在所有情况下都有效,除非里面有?or=标志{}

 var db = new MyContext();
 var fullSql =
 @"select /*+ PARALLEL(6) */ id 
    from table1 ( contains(sometext,' ( {?}xxx ) ') > 0 ) 
    and some_field = :someParam order by xxx desc fetch next 10 rows only ";
var sqlParams = new List<object>();
sqlParams.Add(0);
var ids = db.Database.SqlQuery<string>(fullSql, sqlParams.ToArray()).ToList();

如果我删除 {?} 它可以工作,如果我硬编码someParam它也可以工作。如果没有它通过Input string was not in a correct format

编辑:似乎 EF 将花括号内的内容视为参数

4

2 回答 2

0

你需要在你的字符串前面放一个“q”,让它变成文字

因此:从 table1 ( contains(sometext,q' ( {?}xxx ) ') > 0 )

看到这个问题:如何为 Oracle 使用花括号转义

于 2018-02-05T07:45:40.867 回答
0

是的,正如您在评论中提到的,解决方案是将所有内容替换{{{. 和所有}}}

于 2021-03-25T21:57:26.247 回答