790 messaggi dal 11 febbraio 2013
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 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.