Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

128
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda