Я пытаюсь создать функцию, которая будет сравнивать вложенные значения в списке JSON. Ему нужно сравнить значения final.model с current.model. Когда модель совпадает, необходимо вычесть current.qty из final.qty и удалить все модели из списка, где qty=0.
Я пробовал это разными способами, но не смог сравнить окончательные модели с текущими моделями.
{"final": [
{"model": "RRUS-11", "qty": "4"},
{"model": "RFS ATM192012-0", "qty": "2"},
{"model": "WCS-IMFQ-AMT-43", "qty": "8"},
{"model": "SBNHH-1D65A", "qty": "9"} ],
"current": [
{"model": "SBNHH-1D65A", "qty": "6"},
{"model": "RRUS-32 B2", "qty": "4"},
{"model": "WCS-IMFQ-AMT-43", "qty": "6"},
{"model": "RRUS-11", "qty": "4"} ]
}
public class Container
{
public string model { get; set; }
public int? qty { get; set; }
}
var results = JsonConvert.DeserializeObject<Dictionary<string, List<Container>>>(requestBody);
var DetermineProposed = results.Where(x => !string.IsNullOrWhiteSpace(x.Key))
.Select(x => new { x.Value })
.ToList();
return new OkObjectResult(DetermineProposed);
This is what the returned DetermineProposed should look:
[ {"model": "WCS-IMFQ-AMT-43", "qty": "2"},
{"model": "SBNHH-1D65A", "qty": "3"} ]
Используйте пользовательский IComparer<T>. См. MSDN: docs.microsoft.com/en-us/dotnet/api/…
Спасибо за ваш отзыв!





JSON — это строка. Как только вы проанализируете его, вы больше не будете иметь дело с JSON. Текущий код даже не извлекает два списка, а тем более не сравнивает их.
Вычисление разница в количествах может быть выполнено с помощью LINQ и объединения двух списков на основе модели:
var results = JsonConvert.DeserializeObject<Dictionary<string, List<Container>>>(json);
var final=results["final"];
var current=results["current"];
var diffs=from f in final
join c in current on f.model equals c.model
let diff=new Container{model=f.model,qty=f.qty-c.qty}
where diff.qty!=0
select diff;
Результат будет:
model qty
WCS-IMFQ-AMT-43 2
SBNHH-1D65A 3
Это сделало это! Я знал, что упускаю из виду что-то простое. Спасибо!
JSON — это строка. Как только вы проанализируете его, вы больше не будете иметь дело с JSON. В вашем случае вы даже не сравниваете содержимое ключей
finalиcurrent. Вы должны извлечь это содержимое, прежде чем сможете его сравнить.