【问题标题】:Improving Linq statement selecting Json改进 Linq 语句选择 Json
【发布时间】:2012-04-13 18:01:08
【问题描述】:

我有一些这样的 json:

[{
    "id": "20148324",
    "teacher", "Mr Jones",
    "names": ["john", "bill", "ben"],
    "priority": 2
},
{ 
    "id": "56128324",
    "teacher", "Mrs Jones"
    "names": ["john", "bill", "ben"],
    "priority": 1
}]

我希望能够首先选择优先级值为 1 的孩子,然后在该孩子中我想选择嵌套名称数组中的姓氏。

我可以分两步完成,但想知道如何使用一个 linq 语句来完成。

这是我到目前为止所得到的,但我只添加了一个字典项。如何将所有姓名与教师姓名分别添加到字典中:

var things = response.Where(p => p["priority"].Value<int>() == 1)
                             .ToDictionary(m => m["teacher"].ToString(),
                                           m => m["names"].Children().ToString());

【问题讨论】:

  • 我认为不需要最后一个 ToString() 。看来您将 Children() 数组转换为字符串(即“String[]”)。
  • @VladimirPerevalov 那么它仍然会返回一个字典项,但是作为字典>()。我需要以某种方式遍历名称并跳回到父级以选择教师姓名。
  • 我想我看到了问题所在。你想得到一个老师的所有学生?然后你需要进行分组。类似 `response.Where(p => p["priority"].Value() == 1).Group(m => m["teacher"].ToString(), m => m["名字"].Children())
  • @VladimirPerevalov 嗨,我得到的结果与之前的结果与字符串和列表之前的结果相同
  • 你能更准确地告诉我你想要达到什么目标吗?编写包含 4-5 项的示例数据,并显示您希望看到的结果数据。 (用这些更新问题)

标签: json linq json.net


【解决方案1】:

最终做到了这一点。不相信它是最好的方法,但它有效。

var data = response.Where(p => p["priority"].Value<int>() == 1)
                             .SelectMany(s=>s["names"])
                             .ToDictionary(m => m.Value<string>(),
                                           m => m.Parent.Parent.Parent["teacher"].ToString());

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多