我有下表定义
[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)
在实体框架中,我想匹配所有 MyTable,其中 B 中的 Id 是某个值并且 A 中的 Id 具有某个值。我尝试了很多事情并遇到了很多错误。如何添加下面的代码来达到我想要的效果?
var results =
_repository.Get<MyTable>(_ => _.A == "Something" && _.B = ???);
您可以使用 ”EF.Functions.JsonContains
“函数,但是B
列需要是“jsonb
“ 键入而不是 ”json
".
[Required]
[Column(TypeName = "jsonb")]
public string B { get; set; }
Example:
var search = "[{\"Id\": \"b8a3cbbc-a4d6-4697-8a0b-cb1d15be179d\"}]";
var results = _context.MyTable2
.Where(_ => _.A == "Something"
&& EF.Functions.JsonContains(_.B, search));
类似的答案HERE
此外,您还可以输入查询并使用 Dapper。
Example:
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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)