我想查询一个JArray
并根据某些条件返回另一个JArray
。现在使用 LINQ,我可以首先查询它,返回一个IEnumerable<JToken>
并将其转换为另一个JArray
,如下所示:
IEnumerable<JToken> ienmTotalObjects = arrResults.Where(x => x["uResultId"]?.ToString() == arrTaskResults[intResult]["uResultId"].ToString() && x["iElementId"]?.ToString() == strUniqueElementId);
JArray arrTotalObjects = new JArray(ienmTotalObject);
现在我刚刚了解了 JSON.NET SelectTokens
(https://www.newtonsoft.com/json/help/html/SelectToken.htm),并且似乎是一个非常方便的功能,可以在不转换为 IEnumerable 的情况下进行查询,但是我无法找到在我的案例场景中应用它的方法。好奇它是否真的可能?任何帮助,不胜感激。
从这个问题中,我可以猜出arrResults
和arrTaskResults
的 2 个结构
var arrResults = JArray.Parse(@"[
{ iElementId: 1, ""uResultId"" :""aa"" },
{ iElementId: 2, ""uResultId"" :""bb"" }
]");
var arrTaskResults = JArray.Parse(@"[
{ ""uResultId"" :""aa"" },
{ ""uResultId"" :""bb"" }
]");
但是,我不知道intResult
和strUniqueElementId
是什么,所以这些设置在这里
var intResult = 0;
var strUniqueElementId = "1";
现在我们可以执行相同的查询,但使用 SelectToken 方法传入 JPath:
var s = arrTaskResults.SelectToken($"$[{intResult}].uResultId");
var selectTokens = arrResults.SelectTokens($"$[?(@.uResultId=='{s}' && @.iElementId=={strUniqueElementId})]");
执行此操作将输出以下内容:
[
{
"iElementId": 1,
"uResultId": "aa"
}
]