Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

134
Visualizações
Cómo agrupar la lista de objetos C#

Estoy llamando a varias API, por lo que tengo un problema para agrupar los datos recibidos.

Por ejemplo:

  1. Api 1 está devolviendo una lista de objetos y cada objeto tiene un buildingId diferente.
  2. Ese buildingId que necesito usar como entrada para Api 2 que está devolviendo una lista de objetos (apartamentos) donde cada uno de los apartamentos tiene un apartmentId diferente.
  3. Luego tengo que llamar a Api 3 y usar apartmentId como entrada y recibiré una lista de los propietarios del apartamento.

El resultado final debe ser como

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

He creado un modelo para los 3 tipos de objetos, este es un ejemplo para Building.

 public class BuildingResponse { public int BuildingId { get; set; } public string City { get; set; } public string Address { get; set; } }

Entiendo que tengo que usar foreach sobre los datos devueltos por Api 1 (sobre edificios), pero ¿cómo lograr el resto del requisito?

Gracias

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si tiene el control de la API y sabe que necesita que sus objetos de construcción estén completamente poblados y que sus objetos de apartamento estén completamente poblados, podría exponer un punto final que devuelva edificios completamente poblados. Es decir, edificios con sus departamentos poblados y departamentos con sus propietarios poblados.

De lo contrario, un enfoque sería agregar algo como List<ApartmentResponse> al modelo BuildingResponse y algo como List<ApartmentOwnerResponse> al modelo ApartmentResponse .

Luego, itera a través de los modelos BuildingResponse que obtiene de su API y solicita los modelos ApartmentResponse para ese edificio y los almacena en List<ApartmentResponse> que agrega al modelo BuildingResponse .

Luego itere a través de los modelos ApartmentResponse , solicite los modelos ApartmentOwnerResponse de la API y agréguelos a List<ApartmentOwnerResponse> que agrega al modelo ApartmentResponse .

Por ejemplo...

 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; }

Debe tener en cuenta que este es un problema N+1, donde está ejecutando una solicitud contra la API para obtener todos los padres ( BuildingResponse ) y luego, para cada uno de ellos, está ejecutando otra solicitud para obtener los niños ( ApartmentResponse ). Entonces lo vuelves a hacer para ApartmentResponse y ApartmentOwnerResponse . Esto podría ser un problema de rendimiento, especialmente a medida que crece su lista de edificios y apartamentos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda