【发布时间】:2020-11-05 00:06:03
【问题描述】:
我有一个具有HashSet<int> 成员的模型。由于我无法让 Dapper 自动从数组创建集合,我想我会使用多重映射查询并将数组作为单独的列,拆分并在 lambda 中创建集合。为了清楚起见,我想反序列化整个模型,而不仅仅是集合的位。
我的第一次多重映射尝试也失败了,所以我决定尝试一些更简单的方法,获取一个数组并将其反序列化为List<int> 或int[]。这就是我卡住的地方。
我使用的是 PostgreSQL 12 数据库。
代码sn-p如下
var query = "SELECT ARRAY[1, 2, 3];";
var ints1 = await _conn.QueryAsync<List<int>>(query); // This returns an empty array
var ints2 = await _conn.QueryAsync<int[]>(query); // System.ArgumentException: Invalid type owner for DynamicMethod.
我不太确定自己做错了什么,Google 似乎也没有帮助,我只发现有关在查询中使用列表的问题。
编辑:好的,我通过将数组转换为 JSON 来实现它,但我仍然觉得这个解决方案很难看。有没有办法避免创建 JSON?
【问题讨论】:
-
我对 SQL 有点生疏,但
SELECT ARRAY[1, 2, 3]似乎不是常见的 SQL,postgres 还是没有?我可能会建议 Dapper 可能只是不支持这种非常时髦的语法 -
我不熟悉postgres,
query是否返回一列3 行?一排三列?还是一行一列? -
@Crowcoder 它返回一个值为
{1, 2, 3}的单行 -
作为字符串?那么你会如何期望 Dapper 神奇地知道这是一个整数列表?
-
@Liam 以下查询
SELECT pg_typeof(ARRAY[1,2,3])返回“integer[]”,所以我期待 Dapper 以某种方式知道这不是字符串。此外,以字符串形式获取结果会引发异常。
标签: c# postgresql .net-core dapper