Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

130
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!