【问题标题】:Postgresql FromSqlInterpolated query with braces带大括号的 Postgresql FromSqlInterpolated 查询
【发布时间】:2021-03-01 16:34:11
【问题描述】:

尝试使用 FromSqlInterpolated 查询 postgres 数据库,特别是表的 jsonb 列,因此,我需要在查询中使用花括号。

这是postgresql中的查询:

SELECT ass.* from "assignment" ass WHERE ass."data"-> 'SubAssignmentCodes' @> '[{"Code": "remoteName"}]' or code = '{remoteName}'

现在尝试将该查询放入 FromSqlInterpolated。

问题是c#认为这部分查询('[{"Code": "remoteName"}]')中的大括号是插值大括号而不是查询的大括号。

我显然可以将它们转义,但这样做会从提交到数据库的最终查询中一起删除大括号。

我什至尝试将查询的那部分分离出来:

.FromSqlInterpolated($"SELECT ass.* from \"assignment\" ass WHERE ass.\"data\" -> 'SubAssignmentCodes' @> {lastBit}::jsonb  or code = '{assignmentCode}'") 

var lastBit = "'[{{\"Code\": \"{assignmentCode}\"}}]'";

这个查询几乎可以工作,但给出了这个错误:

Npgsql.PostgresException: '22P02: json 类型的输入语法无效'

这是我最初的尝试:

.FromSqlInterpolated($"SELECT ass.* from \"assignment\" ass WHERE ass.\"data\"-> 'SubAssignmentCodes' @> '[{{\"Code\": {assignmentCode}}}]' or code = {assignmentCode}")

【问题讨论】:

    标签: c# .net database postgresql npgsql


    【解决方案1】:

    我把 lastBit 改成了这个:

    var lastBit = System.Text.Json.JsonSerializer.Serialize(new[] { new { Code = "assignmentCode" } });
    

    它现在可以工作了。结果证明它确实是无效的 JSON,并且正确地序列化它而不是自己将 JSON 写入字符串是解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2015-09-05
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2018-10-16
      • 2016-10-03
      相关资源
      最近更新 更多