我想查询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即可查询,但是我无法找到方法在我的案例场景中应用它。好奇,如果它真的可能吗?任何帮助表示赞赏。
答案 0 :(得分:2)
从问题我可以猜到arrResults
和arrTaskResults
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";
我们现在可以执行相同的查询,但使用传入JPath的SelectToken方法:
var s = arrTaskResults.SelectToken($"$[{intResult}].uResultId");
var selectTokens = arrResults.SelectTokens($"$[?(@.uResultId=='{s}' && @.iElementId=={strUniqueElementId})]");
执行此操作将输出以下内容:
[
{
"iElementId": 1,
"uResultId": "aa"
}
]