2016-08-23 477 views
1

的定义,我有以下JSON:'Newtonsoft.Json.Linq.JArray' 不包含

{ 
    "ok": true, 
    "resp": [ 
     { 
      "aaa": 111, 
      "bbb": "xyz", 
      "ccc": [ 
       {...}, 
       { 
        "ddd": "hello", 
        "eee": 666, 
       }, 
       {...} 
      ], 
      "read": false 
     }, 
     {...}, 
     {...} 
    ] 
} 

与此C#代码:

dynamic my_obj = JsonConvert.DeserializeObject(JSON); 
var resps = my_obj.resp; 
var x = ((IEnumerable<dynamic>)resps).Cast<dynamic>() 
          .Where(p => p.ccc.eee == 666).Count(); 

及以下错误:

'Newtonsoft.Json.Linq.JArray' does not contain a definition for 'eee'. 

我知道,我可以通过所有元素“resps”迭代和计数元素,其中元素“ccc.eee”等于666,但有可能做到这一点在一条线的Wi th linq?

+4

不是应该'CCC [1] .eee EEE = 666的

计数数'? –

+0

如果你想使一个@UlugbekUmirov – Jonesopolis

+0

这就是答案,认为OP具有与MongoDB的 – Rahul

回答

5

由于ccc是数组,你需要遍历它。具有RESP对象

int x = ((IEnumerable<dynamic>)resps).Sum(
      p => ((IEnumerable<dynamic>)p.ccc).Count(o => o.eee == 666)); 

计数数目至少一个EEE = 666::

int x = ((IEnumerable<dynamic>)resps).Count(
      p => ((IEnumerable<dynamic>)p.ccc).Any(o => o.eee == 666)); 
+0

几乎在那里..你的回答计数“eee = 666”。数组'ccc'可以有多个元素,其中eee = 666(我只想计算一次)。我正在寻找resps中的一些对象,其中“eee = 666”? – KD82

+0

@ KD82我更新了答案 –

+1

谢谢@Ulugbek。当你在'之前'放置'之前'就像一个魅力。'任何' – KD82