使用 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'
我有以下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'