Ho una tabella dove elenco i clienti
Al click del cliente compaiono i brand trattati
Al click dei brand compaiono gli articoli
Ho una classica tabella Anagrafica (codice,PIVA..ecc)
Ho una tabella DestinazioniDiverse dove sono riportate le destinazioni solo per quei clienti che ne hanno
Ho infine una tabella che definisce
codiceAgente, codiceCliente, codiceDestinazione, brand
(le destinazioni riportate qui sono solo quelle attive...percui non tutte quelle che il cliente puo avere)
es: agente1-cliente1-linea1-'nessunaDestinazione'-brand1
agente1-cliente2-linea1-'nessunaDestinazione'-brand1
agente1-cliente2-linea2-'destinazione1'-brand1
La mia webApi deve ritornare un oggetto che abbia una lista clienti con le destinazioni (attive) e il codice agente
public class Cliente
{
public string CodiceClienteAnagrafica { get; set; } //FK
public string RagioneSociale { get; set; }
...
public List<DestinazioneDiversa> DestinazioniDiverse { get; set; }
}
public class DestinazioneDiversa
{
public string CodiceDestinazione { get; set; }
...
public string CodiceCliente { get; set; }//fk
public Cliente Cliente { get; set; }
}
public class ClienteAgente
{
public string Codicecliente { get; set; }
public string Brand { get; set; }
public string CodiceDestinazione { get; set; }
public string CodiceAgente { get; set; }
...
}
Ora vi mostro il 'mostro' che ho concepito
public async Task<IActionResult> GetClientiAgenteAsync()
{
var clientiAgente = await new ClienteAgenteRepository(_ctx)
.GetClientiAgenteAsync();
var destinazioniAttive = clientiAgente
.Where(d => d.CodiceDestinazione != "")
.Select(d => d.CodiceDestinazione);
var clientiDestinazioni = _ctx.Clienti
.Include(d => d.DestinazioniDiverse);
var clientiView = clientiAgente
.Select(c => new { c.CodiceAgente, c.CodiceCliente })
.Distinct()
.Join(clientiDestinazioni,
c => c.CodiceCliente, a => a.CodiceClienteAnagrafica,
(clientiAgenti, anagraficaClienti) =>
new
{
Codage = clientiAgenti.CodiceAgente,
Cliente = anagraficaClienti,
Destinazioni = anagraficaClienti.DestinazioniDiverse.Where(d => destinazioniAttive.Contains(d.CodiceDestinazione))
});
var result = new
{
Total = clientiView.Count(),
Customers = clientiView.OrderBy(c => c.Cliente.CodiceClienteAnagrafica).ToArray()
};
return Ok(result);
Ho provato alcune strade ma non ho trovato quella giusta
potete aiutarmi a capire come migliorare?
grazie
Modificato da jjchuck il 09 febbraio 2019 17:41 -