c# - 带大括号的 Postgresql FromSqlInterpolated 查询
问题描述
尝试使用 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}")
解决方案
我将 lastBit 更改为:
var lastBit = System.Text.Json.JsonSerializer.Serialize(new[] { new { Code = "assignmentCode" } });
现在可以了。事实证明它确实是无效的 JSON 并且正确地序列化它而不是自己将 JSON 写入字符串是解决方案。
推荐阅读
- r - 使用 R 搜索文本字符串并返回下一行中的文本字符串
- python-3.x - 如何使用 seaborn factorplot 绘制多个图?
- javascript - 如何将字符串从php传递给js
- system-verilog - 如何从与系统verilog中的函数同名的函数返回一个数组?
- assembly - 汇编:将输入与字符串进行比较
- mysql - MySQL在返回的一组记录中查询相同数量的状态
- php - XML 中的 PHP - 解析错误:文档末尾的额外内容
- julia - 使矩阵的行或列全为零 [Julia]
- html - 如何修复我的导航栏以使其居中并使其在两侧均匀?
- unity3d - Unity-如何通过触摸输入移动?