C# 如何使用LINQ查詢Json
阿新 • • 發佈:2021-11-09
Demo Entities格式:其中OrgCode欄位是Json型別
[{ "Id": "AAAA", "Name": "門店A會員卡", "OrgCode": [{ "OrgCodes": ["02873"], "BrandCode": "01747" }], "IsEnable": 1 }, { "Id": "BBBB", "Name": "門店B會員卡", "OrgCode": [{"OrgCodes": ["00777", "02873"], "BrandCode": "01747" }], "IsEnable": 1 } ]
想要使用LINQ用OrgCode欄位中的BrandCode值做篩選,有兩種辦法:
// PS:SQL語句寫法
SELECT * FROM TableDemoWHERE JSON_CONTAINS(OrgCode, JSON_OBJECT('BrandCode','01747'))
→ 用法JSON_CONTAINS([json欄位名], JSON_OBJECT([json中的指定欄位名],[判斷引數值]))
(一)假如json是動態變化的,轉化成JObject型別做篩選
// Json字串 var Json = "上文DemoEntities"; var test = JsonConvert.DeserializeObject<JObject>(json); var code = test ["BrandCode"].Value<int>(); // LINQ從資料庫查 var test = DBRep.Change<DemoTable>().DetachedEntities.Where(e => e.IsEnable)
.Select(e => JsonConvert.DeserializeObject<JObject>(e.OrgCode))
.Where(s => s["BrandCode"].Value<string>() == "01747")
.FirstOrDefault();
(二)假如是規範的,反序列化為C#物件再做篩選(此方法缺點是必須先定義反序列化物件格式)
// Json字串 var json = "上文DemoEntities"; var test = JsonConvert.DeserializeObject<Content>(json); Value value = test.OrgCodeJson.FirstOrDefault(x => x.BrandCode.Equals("01747", StringComparison.InvariantCultureIgnoreCase)); public class Content { public string Id { get; set; } public List<Value> OrgCodeJson { get; set; } public Content() { OrgCodeJson = new List<Value>(); } } public class Value { public List<string> OrgCodes { get; set; } public string BrandCode { get; set; } }
// LINQ從資料庫查
var test = DBRep.Change<DemoTable>().DetachedEntities.Where(e => e.IsEnable)
.Select(e => JsonConvert.DeserializeObject<Content>(e.OrgCode))
.Where(s => s.BrandCode == "01747")
.FirstOrDefault();
參考文件:C# linq 查詢json