我有下表定义
[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/