如何使用Npgsql查询某些jsonb字段
How to query certain jsonb fields using Npgsql
我正在尝试使用 Postgres 中的 jsonb 列将这样的查询映射到 C# 对象中:
select item_object->'thing'
FROM "Table", jsonb_array_elements("JsonColumn")
with ordinality arr(item_object);
(在这种情况下,Json列包含一个 JSON 对象数组,每个对象都有一个 'thing' 字段。)
我看到使用 JsonDocument 或 POCO 可用于在 WHERE 子句中映射这些 Json 函数,但在我的例子中,我试图限制文档的获取量发回以减少需要发生的反序列化的大小和数量。有什么方法可以在 C# 中执行此操作,还是我需要构建自定义查询?
谢谢!
-- 编辑--
例如,我们可以在 C#
中使用这种查询来查询特定的 jsonb 字段吗
DataContext.Table.Select(t => new { t.JsonColumn.thing });
挖掘 json 并且仅 return 'thing' 字段而不是整个 json blob。
根据文档,这适用于 Where 子句:
var joes = context.CustomerEntries
.Where(e => e.Customer.Name == "Joe")
.ToList();
https://www.npgsql.org/efcore/mapping/json.html?tabs=data-annotations%2Cpoco
是的,您可以像在 Where 中一样深入研究 Select 中的 JSON 文档。一般来说,后者支持的表达式也适用于前者。
我正在尝试使用 Postgres 中的 jsonb 列将这样的查询映射到 C# 对象中:
select item_object->'thing'
FROM "Table", jsonb_array_elements("JsonColumn")
with ordinality arr(item_object);
(在这种情况下,Json列包含一个 JSON 对象数组,每个对象都有一个 'thing' 字段。)
我看到使用 JsonDocument 或 POCO 可用于在 WHERE 子句中映射这些 Json 函数,但在我的例子中,我试图限制文档的获取量发回以减少需要发生的反序列化的大小和数量。有什么方法可以在 C# 中执行此操作,还是我需要构建自定义查询?
谢谢!
-- 编辑--
例如,我们可以在 C#
中使用这种查询来查询特定的 jsonb 字段吗DataContext.Table.Select(t => new { t.JsonColumn.thing });
挖掘 json 并且仅 return 'thing' 字段而不是整个 json blob。
根据文档,这适用于 Where 子句:
var joes = context.CustomerEntries
.Where(e => e.Customer.Name == "Joe")
.ToList();
https://www.npgsql.org/efcore/mapping/json.html?tabs=data-annotations%2Cpoco
是的,您可以像在 Where 中一样深入研究 Select 中的 JSON 文档。一般来说,后者支持的表达式也适用于前者。