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

我正在比较两个Newtonsoft JArrays。我遍历第一个,然后使用Linq查找第二个JArray是否具有具有相同id和sortOrder值的对象。仅当它们不同时,才应执行UpdateData方法。我已经在下面封装了代码和两个JArray数据。根据数据,由于第一项在两个JArray之间具有相同的id和sortOrder,因此不应调用UpdateData方法,并且foundItem应该是有效的对象。但它改为null,并调用UpdateData()方法。由于第二个和第三个项目的sortOrder不同,因此仅应调用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": 3
  }
]}
dianxinwad 回答:如何比较两个JArray对象之间的项目并仅在它们不同时调用方法

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")));
本文链接:https://www.f2er.com/3164921.html

大家都在问