使用 EF Core 5 查询 Postgres Json 字段

Query Postgres Json Field using EF Core 5

我有以下table定义

  [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));

相似答案

此外,您可以输入查询并使用 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'