2012-04-13 56 views
0

我有一些JSON這樣的:提高LINQ的聲明選擇的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()); 
+1

我認爲最後的ToString()是不需要的。看起來你將Children()數組轉換爲字符串(即「String []」)。 – 2012-04-13 18:17:32

+0

@ VladimirPerevalov然後它仍然會返回一個字典項目,但作爲字典<字符串,IEnumerable >()。我需要以某種方式迭代名稱,並跳回到父項以選擇教師名稱。 – gdp 2012-04-13 18:26:04

+0

我想我看到了問題。你想讓所有的老師的學生?然後你需要執行分組。例如'response.Where(p => p [「priority」]。Value ()== 1).Group(m => m [「teacher」]。ToString(),m => m [「names」 ] .Children()) – 2012-04-13 18:37:34

回答

0

最終是否這樣做。不相信它最好的方式,但它的工作原理。

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());