下面代码判断OpenUserIds(long[]类型的jsonb)字段,是否包含 8
basequery = basequery.Where(m => Microsoft.EntityFrameworkCore.NpgsqlJsonDbFunctionsExtensions.JsonContains(EF.Functions, m.OpenUserIds, new long[] { 8 }));
Dictionary<string,string>的注意事项
如果jsonb属性的类型是Dictionary<string,string>,在查询时会有问题,例如,字段name,在数据库中这样存储:
{ "zh-CN" : "测试" , "en-US" : "test" }
在EF中要查询英文信息,这样查询会报错
from m in db.table1
where m.name["en-US"] == "test"
select m
解决方案
创建一个类,继承 Dictionary<string,string>,并增加一个enUS属性
public class MultiLang:Dictionary<string,string>
{
[JsonPropertyName("en-US")]
public string enUS { get; set; }
}
把josnb的属性改为MultiLang,这样,在EF中就可以这样查询了:
from m in db.table1
where m.name.enUS == "test"
select m
enUS属性其实没有实际作用,它就是给EF查询时,做一个转义的桥梁而已