如何使用 LINQ 在 C# 中重构对象?

Ste*_*fan 1 linq json group-by c#-3.0

我有一个数据集如下:

[
    {
        "Id": 1,
        "Country": "Uruguay",
        "Name": "Foo",
        "Status": "Completed",
    },
    {
        "Id": 2,
        "Country": "Uruguay",
        "Name": "Foo",
        "Status": "Completed",
    },
    {
        "Id": 3,
        "Country": "Germany",
        "Name": "Foo",
        "Status": "Completed",
    },
]
Run Code Online (Sandbox Code Playgroud)

我想按国家对其进行转换和排序,使其看起来如下:

[
    {
        "Country": "Uruguay",
        "Details": [
         {
            "Id": 1,
            "Name": "Foo",
            "Status": "Completed",
         },
         {
            "Id": 2,
            "Name": "Foo",
            "Status": "Completed",
         },
        ],
    },
    {
        "Country": "Germany",
        "Details": [
         {
            "Id": 3,
            "Name": "Foo",
            "Status": "Completed",
         },
        ],
    },
],
Run Code Online (Sandbox Code Playgroud)

这些是 C# 中的类:

public class Countries {
    public int Id { get; set; }
    public string Country { get; set; }
    public string Name { get; set; }
    public string Status { get; set; }
}

public class Details {
    public int Id { get; set; }
    public string Name { get; set; }
    public string Status { get; set; }
}

public class CountryList {
    public string Country { get; set; }
    public List<Details> Details { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的一些内容如下:

var foo = countries
    .GroupBy(x => new Details { Id = x.Id, Name = x.Name, Status = x.Status })
    .Select( y => new CountryList 
     {
         // Country = y.Key. 
     }

var foo = countries
    .GroupBy(x => x.Country)
    .Select( y => new CountryList 
     {
         // Country = y.Key.
         Details = y.GroupBy(a => new Details 
         { 
            Id = a.Id, 
            Name = a.Name, 
            Status = a.Status  
         }).ToList() 
     }
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使用 LINQ 来解决这个问题。我过去做过一些 GroupBy 操作,但我无法解决这个问题。如何将数据集转换为所需的结果?

Svy*_*liv 6

您不需要第二个 GroupBy

var foo = countries
    .GroupBy(x => x.Country)
    .Select(y => new CountryList 
     {
         Country = y.Key,
         Details = y.Select(a => new Details 
         { 
            Id = a.Id, 
            Name = a.Name, 
            Status = a.Status  
         }).ToList() 
     };
Run Code Online (Sandbox Code Playgroud)