Estoy llamando a varias API, por lo que tengo un problema para agrupar los datos recibidos.
Por ejemplo:
El resultado final debe ser como
BuildingA Apartment1 ApartmentOwner1 ApartmentOwner2 Apartment2 ApartmentOwner3 Apartment3 ApartmentOwner4 ApartmentOwner5 ApartmentOwner6 BuildingB Apartment1 ApartmentOwner1 ApartmentOwner2 Apartment2 ApartmentOwner3 ApartmentOwner4He 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
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.