繁体   English   中英

比较两个JSON文件并合并C#中的数据

[英]Compare two JSON File and Merging Data in C#

我有两个 JSONs 文件Country & Ceremony

国家 JSON:

[
 {
   "Short": "AF",
   "Name": "Afghanistan"
 },
 {
   "Short": "AN",
   "Name": "Netherlands Antilles"
 },
 {
   "Short": "AI",
   "Name": "Anguilla"
 },
 {
   "Short": "AL",
   "Name": "Albania"
 } ]

盛典JSON:

[
  {
    "CName": "Fitr",
    "CStart": "2021-11-10T09:00:00",
    "CEnd": "2021-11-14T09:00:00",
    "Loc": {
             "Info": "",
             "Short": "AF"
    }
  },
  {
    "CName": "Azha",
    "CStart": "2023-06-17T09:18:44",
    "CEnd": "2023-06-18T09:18:44",
    "Loc": {
             "Info": "",
              "Short": "AI"
    }
  },
  {
    "CName": "Azha",
    "CStart": "2022-01-05T00:00:00",
    "CEnd": "2022-01-05T23:59:59",
    "Loc": {
            "Info": "",
            "Short": "AL"
    }
  },
  {
     "CName": "Fitr",
     "CStart": "2022-01-05T00:00:00",
     "CEnd": "2022-01-05T23:59:59",
     "Loc": {
             "Info": "",
             "Short": "AN",
     }
  }  
  ]

国家 Model Class

public class Country
{
  public string Short{ get; set; }
  public string Name { get; set; }
}

盛典 Model Class

public class Ceremony
{
  public string CName { get; set; }
  public DateTime CStart { get; set; }
  public DateTime End { get; set; }
  public Loc loc { get; set; }
}

地点 Model Class

public class Loc
{
  public string Info { get; set; }
  public string Short { get; set; }
}

我想显示国家(名称)与 Ceremony、Loc 和 Short 的连接,这样当我在 Short 前面读取 Ceremony 数据时,我可以看到国家的全名。 国家全名应来自国家 JSON。

结果应该是这样的:

    CName CStart CEnd   Short        Name 
    Fitr  ""      ""    AF           Afghanistan
    Azha  ""      ""    AI           Anguilla

如何使用 LINQ 显示 2021 年仪式最多的国家,即使用 (Short)?

您可以像下面这样在ShortName上加入两个实体:

var countries = ...;
var ceremonies =  ...;

var result = (from c in countries
             join ce in ceremonies on c.Short equals ce.loc.Short
             select new {
              ce.CName,
              ce.CStart,
              ce.Cend,
              c.Short,
              c.Name
            }).Where(r=> r.CStart.Year == 2021).
            GroupBy(r=> r.Short).Select(r=> new { Short = r.Key, 
           EventCount = r.Count()}).OrderByDescending(r=> r.EventCount)
           .ToArray();
         

随着问题的发展,编辑添加了分组和排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM