postgresql - 使用 EF Core 5 查询 Postgres Json 字段

标签 postgresql entity-framework-core c#-9.0

我有下表定义

  [Table("MyTable")]
  public class MyTable: BaseEntity
  {
    [Required]
    public string A{ get; set; }

    [Required]
    [Column(TypeName = "json")]
    public string B{ get; set; }
  }

B 列如下所示:

{"Data": [{"Id":"b8a3cbbc-a4d6-4697-8a0b-cb1d15be179d"}]} (aside from Id there are other properties but for brevity I removed them)

在 Entity Framework 中,我想匹配所有 MyTable,其中 B 中的 Id 是特定值并且 A 具有特定值。我尝试了很多事情并遇到了很多错误。如何添加以下代码来实现我想要的?

var results = 
   _repository.Get<MyTable>(_ => _.A == "Something" && _.B = ???);

最佳答案

您可以使用“EF.Functions.JsonContains”函数,但B列需要为“jsonb”类型而不是“json”。

    [Required]
    [Column(TypeName = "jsonb")]
    public string B { get; set; }

示例:

var search = "[{\"Id\": \"b8a3cbbc-a4d6-4697-8a0b-cb1d15be179d\"}]";
var results = _context.MyTable2
      .Where(_ => _.A == "Something" 
                    && EF.Functions.JsonContains(_.B, search));

类似答案HERE

此外,您还可以输入查询并使用 Dapper。

示例:

 with temp AS(
  select t."Id", t."A", json_array_elements(t."B"->'Data') as B1 from "MyTable"  t
  )
  select * from temp t
  where 
  t."A"='Something' and
  t.b1->>'Id'='b9a3cbbc-a4d6-4697-8a0b-cb1d15be179a'

关于postgresql - 使用 EF Core 5 查询 Postgres Json 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68439395/

相关文章:

sql - Postgres 中 JSON 查询中的 OR 子句

sql - 简单的 jsonb_agg ORDER BY

entity-framework - 循环/遍历所有EF模型中的所有属性以设置列类型

immutability - 如何检查 NET 5 中的 c# 9 中的记录在运行时是不可变的

c# - 如何更新编译器?

C# record ToString() 导致堆栈溢出并停止调试 session 并出现奇怪的错误

database - 如何在 Npgsql 中使用 Update 命令避免 SQL 注入(inject)?

java - PostgreSQL 中的可修改字符串数组

c# - EF Core 2.1 - 如何映射具有相同类型的多对多

c# - EF Core 与 Postgres 正在生成负主键