如何比较两个 JArray 对象之间的项,并仅在它们不同时才调用方法



我正在比较两个Newtonsoft JArrays。我正在遍历第一个,然后使用 Linq 查找第二个 JArray 是否具有具有相同 id 和 sortOrder 值的对象。仅当它们不同时,才应执行 UpdateData 方法。我在下面附上了代码和两个 JArray 数据。根据数据,由于第一项在两个 JArray 之间具有相同的 id 和 sortOrder,因此它不应调用 UpdateData 方法,并且 foundItem 应该是有效的对象。但它以空形式出现,并调用 UpdateData() 方法。UpdateData() 方法应该只对第二项和第三项调用,因为它们具有不同的排序顺序。

private void CheckSaveDataLogic(JArray featuredProductsData, JArray originalFeaturedProductsData)
{
foreach (JObject item in featuredProductsData)
{ 
if(originalFeaturedProductsData != null)
{
var foundItem = originalFeaturedProductsData
.FirstOrDefault(x => x.Value<int>("Id") == 
Convert.ToInt32(item.GetValue("id")) && x.Value<int>("sortOrder") == 
Convert.ToInt32(item.GetValue("sortOrder")));
if(foundItem == null)
{
UpdateData(item, isFeatured);
}
}                                            
}
}
featuredProductsData JArray:
{[
{
"id": "2190",
"sortOrder": 1
},      
{
"id": "2436",
"sortOrder": 2
},
{
"id": "1874",
"sortOrder": 3
}
]}
originalFeaturedProductsData JArray:
{[
{
"id": "2190",
"sortOrder": 1
},      
{
"id": "1874",
"sortOrder": 2
},
{
"id": "2436",
"sortOrder": 3
}
]}

JSON 区分大小写。

Id不是id;你的JSON指示密钥是id,但你的代码正在检查Id

试试这个:

var foundItem = originalFeaturedProductsData
.FirstOrDefault(x => x.Value<int>("id") == 
Convert.ToInt32(item.GetValue("id")) && x.Value<int>("sortOrder") == 
Convert.ToInt32(item.GetValue("sortOrder")));

最新更新