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

梅西

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

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")));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章