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 TableDemo WHERE 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數組),檢索數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM