C# JToken上的LINQ where查询

C# JToken上的LINQ where查询,c#,json,linq,json.net,where,C#,Json,Linq,Json.net,Where,我不熟悉LINQ查询,我想从JToken中获取1个项目(id=0的项目),但我不知道该如何工作 我尝试了很多不同的方法,但这是我首先尝试的代码: var statId0 = from stat in objectRankedStats where (int)stat["id"] == 0 select stat; 我有一个错误: 找不到源类型“Newtonsoft.Json.Linq.JToken”的查询模式的实现找不到的地方。“System.Linq”是否缺少引用或using指令 这看起来像

我不熟悉LINQ查询,我想从
JToken
中获取1个项目(id=0的项目),但我不知道该如何工作

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

var statId0 = from stat in objectRankedStats where (int)stat["id"] == 0 select stat;
我有一个错误:

找不到源类型“Newtonsoft.Json.Linq.JToken”的查询模式的实现找不到的地方。“System.Linq”是否缺少引用或using指令

这看起来像是
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"];
这就是为什么我认为它是空的:

我对我在dotnetFiddle.com上使用的代码做了一个简化版本:

此代码适合我:


正如错误所说,您是否已使用System.Linq在标题处了吗?这不是有效的JSON。您的意思是要包含数组的名称吗?还是外部的
{
}
有错误?@tia:噢,该死!我习惯了典型的错误消息“找不到类型或名称空间”,所以我没有想到它。缺少using,但现在它返回null(或者我只是为了访问信息而装傻)。@Andrew Whitaker:这个JSON是有效的,因为它来自一个官方API,但我“硬编码”了JSON文件的这一部分,它太大了,数组的名称是“冠军”。但谢谢你们的评论。它不应该返回空值。它返回空列表还是包含单个空项的列表?你是如何检查它是否为空的?这工作得很好!您能简单地解释一下objectRankedStats中var statId0=from stat之间的区别吗?其中(int)stat[“id”]==0 select stat;和var champ=objectRankedStats.FirstOrDefault(jt=>(int)jt[“id”]==6);请?您的statId0是IEnumerable对象。简而言之,IEnumerable是集合、序列的接口。使用FirstOrDefault时,从序列中提取第一项(或空值,序列的值为空)。
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);
            }
        }
    }
}