gpt4 book ai didi

c# - 如何对对象列表进行分组 C#

转载 作者:行者123 更新时间:2023-12-05 04:34:24 28 4
gpt4 key购买 nike

我正在调用多个 API,因此我无法对接收到的数据进行分组

例如:

  1. Api 1 返回一个对象列表,每个对象都有不同的 buildingId。
  2. 我需要将那个 buildingId 用作 Api 2 的输入,它返回对象(公寓)列表,其中每个公寓都有不同的 apartmentId。
  3. 然后我必须调用 Api 3 并使用 apartmentId 作为输入,我将收到一份公寓所有者列表。

最终结果应该是这样的

BuildingA
Apartment1
ApartmentOwner1
ApartmentOwner2
Apartment2
ApartmentOwner3
Apartment3
ApartmentOwner4
ApartmentOwner5
ApartmentOwner6
BuildingB
Apartment1
ApartmentOwner1
ApartmentOwner2
Apartment2
ApartmentOwner3
ApartmentOwner4

我已经为所有 3 种类型的对象创建了模型,这是建筑的示例。

public class BuildingResponse
{
public int BuildingId { get; set; }

public string City { get; set; }

public string Address { get; set; }
}

我了解我必须对 Api 1 返回的数据(针对建筑物)使用 foreach,但如何实现其余要求?

谢谢

最佳答案

如果您可以控制 API,并且您知道您需要完全填充您的建筑对象,并且完全填充您的公寓对象,您可以公开一个返回完全填充建筑物的端点。也就是说,居住着公寓的建筑物和居住着业主的公寓。

如果没有,一种方法是添加类似 List<ApartmentResponse> 的内容到 BuildingResponse模型,以及类似 List<ApartmentOwnerResponse> 的东西到 ApartmentResponse模型。

然后,您遍历 BuildingResponse您从 API 取回的模型并请求 ApartmentResponse该建筑物的模型并将其存储在 List<ApartmentResponse> 中你添加到 BuildingResponse模型。

然后遍历ApartmentResponse型号,请求 ApartmentOwnerResponse来自 API 的模型,并将它们添加到 List<ApartmentOwnerResponse>你添加到 ApartmentResponse模型。

例如……

public class BuildingResponse
{
// Other properties / methods
public List<ApartmentResponse> Apartments { get; private set; } = new List<ApartmentResponse>();
}

public class ApartmentResponse
{
// Other properties / methods
public List<ApartmentOwnerResponse> Owners { get; private set; } = new List<ApartmentOwnerResponse>();
}

public class ApartmentOwnerResponse
{
// Properties / methods
}

public List<BuildingResponse> GetBuildings()
{
List<BuildingResponse> buildings = GetBuildingsFromApi();
foreach (BuildingResponse building in buildings)
{
List<ApartmentResponse> apartments = GetBuildingApartmentsFromApi(building.BuildingId);
building.Apartments.AddRange(apartments);
foreach (ApartmentResponse apartment in apartments)
{
List<ApartmentOwnerResponse> owners = GetApartmentOwnersFromApi(apartment.ApartmentId);
apartment.Owners.AddRange(owners);
}
}
return buildings;
}

您应该知道这是一个 N+1 问题,您针对 API 执行一个请求以获取所有父级 (BuildingResponse),然后针对每个父级执行另一个请求以获取 child (ApartmentResponse)。然后你再做一次 ApartmentResponseApartmentOwnerResponse .这可能是一个性能问题,尤其是当您的建筑物和公寓列表增加时。

关于c# - 如何对对象列表进行分组 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71239197/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com