1. 程式人生 > 其它 >C# 如何使用LINQ查詢Json

C# 如何使用LINQ查詢Json

  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

參考文件2:mysql根據json欄位內容作為查詢條件(包括json陣列),檢索資料