【问题标题】:How to grouping and summing Jarrays based on certain keys如何根据某些键对 Jarray 进行分组和求和
【发布时间】:2022-01-23 17:11:59
【问题描述】:

我有这样的数据和代码,用于按国家过滤和计数。 但我只能一一过滤。

数据:

[
   {
      "Name":"Amal",
      "Country":"India",
      "salary":"4.000,00"
   },
   {
      "Name":"Luke",
      "Country":"England",
      "salary":"2.500,00"
   },
   {
      "Name":"Tom",
      "Country":"Australia",
      "salary":"2.700,00"
   },
   {
      "Name":"Ram",
      "Country":"India",
      "salary":"2.000,00"
   }
]

代码:

using System;
using Newtonsoft.Json.Linq;
   
        public class Program
        {
            public static void Main()
            {
                string inputJson = "[{'Name':'Amal', 'Country':'India','salary':'4.000,00'},{'Name':'Luke', 'Country':'England','salary':'2.500,00'},{'Name':'Tom', 'Country':'Australia','salary':'2.700,00'}, {'Name':'Ram', 'Country':'India','salary':'2.000,00'}]";
                var jArrObject = JArray.Parse(inputJson);
                Console.WriteLine("***Employee Data***");
                var employee = new JArray(jArrObject.SelectTokens("$.[?(@.Country=='India')]"));
                Console.WriteLine("Total Employee : "+employee.Count);
                Console.WriteLine("Employee : "+employee);
            }
        }

我期待得到这样的结果:

[
   {
      "country":"India",
      "Total Employee":"2",
      "Total Salary":"6.000,00"
   },
   {
      "country":"England",
      "Total Employee":"1",
      "Total Salary":"2.500,00"
   },
   {
      "country":"Australia",
      "Total Employee":"1",
      "Total Salary":"2.700,00"
   }
]

如何将数组对象按国家分组,按国家加总工资?

【问题讨论】:

    标签: c# arrays


    【解决方案1】:

    您可以这样做以将数据投影到匿名类型(或创建要使用的静态类型)。然后你可以序列化结果或做任何你想做的事情:

    CultureInfo ci = new CultureInfo("en-gb");
    ci.NumberFormat.NumberDecimalSeparator= ",";
    ci.NumberFormat.NumberGroupSeparator =".";
    
    var result = jArrObject.GroupBy(ao => ao["Country"])
        .Select(a => new
        {
            Country = a.Key,
            TotalEmployee = a.Count(),
            TotalSalary = a.Sum(x => decimal.Parse(x["salary"].ToString(),NumberStyles.Number, ci ))
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2021-04-12
      相关资源
      最近更新 更多