如何使用@> '含有'运算符与Dapper ORM

时间:2017-04-13 15:05:28

标签: c# postgresql dapper

使用Dapper ORM我构建以下查询以从PostgreSQL数据存储区获取特定订单:

string.Format("SELECT * FROM OrderTable WHERE orderjson @> {0}",
    "'{\"Lines\":[{\"SKUID\":\"@SkuId\"}]}'");

123456-0传递给参数@SkuId此构造应导致以下查询

SELECT * FROM ordertable WHERE orderjson @> '{"Lines":[{"SKUID":"123456-0"}]}'

然而,Dapper似乎在@>包含运算符时遇到了一些问题,因为查询始终不返回任何结果。

如何将此@>运算符与Dapper一起使用?

更新

我将构造更新为以下内容:

$@"
    SELECT * FROM ordertable
    WHERE orderjson @> '{{""Lines"":[{{""SKUID"": ""@SkuId"" }}]}}'
";

Dapper似乎忽略了参数@SkuId,因为我的查询看起来像

SELECT * FROM ordertable
WHERE orderjson @> '{"Lines":[{"SKUID": "@SkuId" }]}'

1 个答案:

答案 0 :(得分:1)

另请参阅此Github issue,这也可能有用。

我们最终分成两个陈述:

SkuLineJson = $@"{{""Lines"":[{{""SKUID"": ""{object.SkuId}""}}]}}"

在我们的sql语句构造中使用此变量:

$@" SELECT * FROM ordertable 
    WHERE orderjson @> json_in(@SkuLineJson::cstring)::jsonb
";