LINQ在哪里查询JToken

时间:2014-12-08 16:48:01

标签: c# json linq json.net where

我是LINQ查询的新手,我希望从id = 0中获得1个项目(JToken),但我无法知道这应该如何工作

我尝试了很多不同的方法,但这是我先尝试过的代码:

var statId0 = from stat in objectRankedStats where (int)stat["id"] == 0 select stat;

我发现了这个错误:

  

找不到源类型' Newtonsoft.Json.Linq.JToken'的查询模式的实现。 '凡'未找到。您是否缺少“System.Linq'”的引用或使用指令?

这看起来像objectRankedStats

{[  {
    "id": 40,
    "stats": 
    {
        "totalSessionsPlayed": 10,
        "totalSessionsLost": 8,
        "totalSessionsWon": 2,
    }  
},
{    
    "id": 6,
    "stats":
    {      
        "totalSessionsPlayed": 3,
        "totalSessionsLost": 2,
        "totalSessionsWon": 1, 
    }  
}

]}

我不明白"引用"处理退格

我声明了像这样的objectRankedStats,我在我的代码中的其他地方使用它并且它可以工作。

var objectRankedStats = JObject.Parse(output)["champions"];

这就是我认为它为空的原因: enter image description here

我在dotnetFiddle.com上使用的代码的简化版本:https://dotnetfiddle.net/yS5cTk

1 个答案:

答案 0 :(得分:1)

此代码适用于我: https://dotnetfiddle.net/P95aNq

using System;
using System.Linq;
using Newtonsoft.Json.Linq;

namespace ConsoleApplication1
{
    static class Program
    {
        static void Main()
        {
            try
            {
                const string output = @"{""champions"": [  {
    ""id"": 40,
    ""stats"": 
    {
        ""totalSessionsPlayed"": 10,
        ""totalSessionsLost"": 8,
        ""totalSessionsWon"": 2,
    }  
},
{    
    ""id"": 6,
    ""stats"":
    {      
        ""totalSessionsPlayed"": 3,
        ""totalSessionsLost"": 2,
        ""totalSessionsWon"": 1, 
    }  
}
]}";

                var objectRankedStats = JObject.Parse(output)["champions"];

                var champ = objectRankedStats.FirstOrDefault(jt => (int)jt["id"] == 6);

                Console.WriteLine(champ);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
    }
}