【问题标题】:Extract value from json in a database column using linq使用linq从数据库列中的json中提取值
【发布时间】:2020-05-18 14:14:02
【问题描述】:

假设我的数据库表中有两列如下:

Id     Actions
--     -------
id1    [{"Id": "create", "Schema": {"Id": "create", "Type": "Create"}, "Workflow": "basic"}]

我想提取Workflow 的值并检查它是否等于basic,然后创建一个包含数据库中满足此条件的条目的列表。

我试过的是:

var data = db.Where(wf => (string) JObject.Parse(wf.Actions)["Workflow"] == "basic").AsEnumerable();

然后我检查:

if (data.Any()) 
{
   // do something
}

但是 if 语句抛出了以下错误:

System.ArgumentNullException: Value cannot be null.

【问题讨论】:

    标签: c# json linq


    【解决方案1】:

    使用JArray.Parse:

    var data = db.Where(wf => (string) JArray.Parse(wf.Actions)[0]["Workflow"] == "basic")
        .AsEnumerable();
    

    【讨论】:

      【解决方案2】:

      你的json对象其实是json数组,所以需要解析成JArray

      那么,从JToken获取值的时候,需要调用.Value<string>,然后可以和"basic"字符串进行比较。

      var data = db.Where(wf => JArray.Parse(wf.Actions).FirstOrDefault()?["Workflow"].Value<string>() == "basic").ToList();
      

      【讨论】:

        猜你喜欢
        • 2017-09-24
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 2019-02-19
        • 2019-10-01
        相关资源
        最近更新 更多