• 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数组),检索数据

  • 相关阅读:
    [考试反思]0511省选模拟93:平衡
    [考试反思]0509省选模拟92:警示
    [考试反思]0508省选模拟91:小雨
    [考试反思]0507省选模拟90:信任
    [考试反思]0506省选模拟89:无事
    [专题总结]2-sat及题目&题解(3/5 complete)
    [考试反思]0505省选模拟88:滑稽
    [考试反思]0504省选模拟87:开花
    [考试反思]0502省选模拟86:恐惧
    [考试反思]0501省选模拟85:低落
  • 原文地址:https://www.cnblogs.com/Yan3399/p/15530260.html
Copyright © 2020-2023  润新知