Dis*_*ame 1 c# postgresql entity-framework-core
我有一个复杂的数组,需要在 EF Core 中查询,但似乎找不到正确的组合:
public class A
{
public string Name { get; set; }
[Column(TypeName = "jsonb")]
public List<B> Tags { get; set; }
}
public class B
{
public Guid Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用这些模型类,我试图找到 B 等于某个值的每个 A 和/或列表中的 B。对于第一种情况,我尝试了以下方法但没有成功:
var query = "{\"Id\": \"7aecbd2c-ae2e-4362-9bd6-1d569eb94849\"}";
var test1 = await context.A
.Where(a => EF.Functions.JsonExistAny(a.B, query))
.ToListAsync(context.CancellationToken);
var test2 = await context.A
.Where(a => EF.Functions.JsonContains(a.B, query))
.ToListAsync(context.CancellationToken);
var test3 = await context.A
.Where(a => EF.Functions.JsonContained(query, a.B))
.ToListAsync(context.CancellationToken);
var test4 = await context.A
.Where(a => a.B.Any(b => b.Id == Guid.Parse("7aecbd2c-ae2e-4362-9bd6-1d569eb94849")))
.ToListAsync(context.CancellationToken);
Run Code Online (Sandbox Code Playgroud)
任何方向将不胜感激
您应该使用方括号[]
进行 jsonb 数组查询。
解决方案:
var query = "[{\"Id\": \"7aecbd2c-ae2e-4362-9bd6-1d569eb94849\"}]";
var test2 = await context.A
.Where(a => EF.Functions.JsonContains(a.B, query))
.ToListAsync(context.CancellationToken);
Run Code Online (Sandbox Code Playgroud)
jsonb 数组的查询示例:
SELECT u."Id", u."Addresses"
FROM "Users" AS u
WHERE u."Addresses" @> '[{"Code": 10}]'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1016 次 |
最近记录: |