我正在比较两个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")));