Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要Linq帮助使用JSON.NET选择标记列表吗_C#_Json_Linq_Json.net - Fatal编程技术网

C# 需要Linq帮助使用JSON.NET选择标记列表吗

C# 需要Linq帮助使用JSON.NET选择标记列表吗,c#,json,linq,json.net,C#,Json,Linq,Json.net,我有一个JSON文件,其中包含按键排列的图标列表,每个图标都有一个标记列表。看起来是这样的: { "IconTags": [ { "Key": "Com_Active", "Tags": [ "Green", "Circle", "Active" ] }, { "Key": "Com_Add", "Tags": [ "Green",

我有一个JSON文件,其中包含按键排列的图标列表,每个图标都有一个标记列表。看起来是这样的:

{
  "IconTags": [
    {
      "Key": "Com_Active",
      "Tags": [
        "Green",
        "Circle",
        "Active"
      ]
    },
    {
      "Key": "Com_Add",
      "Tags": [
        "Green",
        "Plus",
        "Add"
      ]
    }
  ] 
}
在运行时,我希望使用JSON.NET解析JSON以获得特定的图标键,并返回标记列表

以下是我目前拥有的:

JObject iconTags = JObject.Parse(File.ReadAllText(@"IconTags.json"));

var tags = from i in iconTags["IconTags"] 
    where i["Key"].Value<string>() == "Com_Add" 
    select i["Tags"].Values<string>();
JObject-iconTags=JObject.Parse(File.ReadAllText(@“iconTags.json”);
变量标记=来自i的图标标记[“图标标记”]
其中i[“Key”].Value()=“Com_添加”
选择i[“标记”].Values();
这是可行的,但它返回
IEnumerable

我希望我的Linq查询只返回
IEnumerable

你们中任何一位优秀的专家能帮我解答Linq问题吗


干杯

您可以改为使用SelectMany,这将展平所有可枚举项

iconTags["IconTags"].Where(i => i["Key"].Value<string>() == "Com_Add" )
 .SelectMany(i => i["Tags"].Values<string>());
iconTags[“iconTags”]。其中(i=>i[“Key”].Value()==“Com\u Add”)
.SelectMany(i=>i[“Tags”].Values());

您可以在文章中获得更多信息

您可以改用SelectMany,这将使所有可枚举项变平

iconTags["IconTags"].Where(i => i["Key"].Value<string>() == "Com_Add" )
 .SelectMany(i => i["Tags"].Values<string>());
iconTags[“iconTags”]。其中(i=>i[“Key”].Value()==“Com\u Add”)
.SelectMany(i=>i[“Tags”].Values());

您可以在文章中获得更多信息

您需要这样的内容:

var tags = (from i in iconTags["IconTags"] 
where i["Key"].Value<string>() == "Com_Add" 
select i["Tags"].Values<string>()).First();
var tags=(从i到iconTags[“iconTags”]
其中i[“Key”].Value()=“Com_添加”
选择i[“标记”].Values()).First();

它将返回您得到的可枚举的第一个元素

您需要这样的内容:

var tags = (from i in iconTags["IconTags"] 
where i["Key"].Value<string>() == "Com_Add" 
select i["Tags"].Values<string>()).First();
var tags=(从i到iconTags[“iconTags”]
其中i[“Key”].Value()=“Com_添加”
选择i[“标记”].Values()).First();

它将返回您得到的可枚举的第一个元素

SelectMany函数缺少Anders箭头。应该是:
.SelectMany(i=>i[“Tags”].Values())@Keith谢谢,我错过了我写得很快的机会,我做了那些更改我真的很喜欢使用这种语法。有什么方法可以让我接受两个答案是正确的吗?@Keith,你在上面选择的答案只会得到第一个可枚举的结果,而不是将它们展平,你可能会错过结果。e、 如果你有一个可枚举的可枚举项,它只会抓取第一个可枚举项并忽略rest@Keith我也喜欢这种语法,一开始有点混乱,但它看起来更像是代码而不是sql,而且大多数时候很容易阅读SelectMany函数缺少Anders箭头。应该是:
.SelectMany(i=>i[“Tags”].Values())@Keith谢谢,我错过了我写得很快的机会,我做了那些更改我真的很喜欢使用这种语法。有什么方法可以让我接受两个答案是正确的吗?@Keith,你在上面选择的答案只会得到第一个可枚举的结果,而不是将它们展平,你可能会错过结果。e、 如果你有一个可枚举的可枚举项,它只会抓取第一个可枚举项并忽略rest@Keith我也喜欢这种语法,一开始它有点混乱,但它看起来更像是代码而不是sql,而且大多数时候它很容易阅读