11.886 messaggi dal 09 febbraio 2002
Contributi
i suoi acquisti eventuali effettuati :)

Cioè, quale valore esattamente? La somma dei totali? La media dei totali? Il numero di ordini inviati?

Esempio, questo mostra il numero di ordini:
@foreach (var item in Model)
{
<tr>
<td>@item.IdCliente</td>
<td>@item.Nomecliente</td>
<td>@item.Acquisti.Count()</td>
</tr>
} 


Ma non è una soluzione ottimale perché stai estraendo dal database tutti i dati di tutti gli ordini solo per visualizzare un dato aggregato. Allora, la soluzione migliore è tornare nel controller ed estrarre solo quello che viene effettivamente visualizzato.

clienti = db.Clienti
.Select(cliente => new ClienteViewModel { Cliente = cliente, NumeroAcquisti = cliente.Acquisti.Count() })
.ToList(); 

Grazie a questa proiezione, verrà estratto dal db solo il numero degli acquisti e non tutti i loro dati.
ClienteViewModel è una nuova classe che dovrai creare e che conterrà la proprietà "Cliente" di tipo "Clienti" e "NumeroAcquisti" di tipo int. Rendi la view tipizzata su List<ClienteViewModel> e correggila così:
@foreach (var item in Model)
{
<tr>
<td>@item.Cliente.IdCliente</td>
<td>@item.Cliente.Nomecliente</td>
<td>@item.NumeroAcquisti</td>
</tr>
} 


ciao,
Moreno

Enjoy learning and just keep making
16 messaggi dal 24 febbraio 2018
No mi sono espresso male, vorrei un'output così, cioè a fronte di un cliente, vedere cosa ha comprato


IdCliente Nome Cliente
1 Genny

Prodotto Prezzo
Chitarra 100
Pantalone 50

========================
IdCliente Nome Cliente
2 Mario

Prodotto Prezzo
PC 200

======================
e cosi via
11.886 messaggi dal 09 febbraio 2002
Contributi
Ok, allora il foreach andrà bene.

Enjoy learning and just keep making
16 messaggi dal 24 febbraio 2018
ok grazie, stavo provando l'istruzione:
clienti = db.Clienti.Select(cliente => new ClienteViewModel { Cliente = cliente, NumeroAcquisti = cliente.Acquisti.Count() }).ToList();

quindi ho creato il model come segue:
namespace AcquistiVendite.ViewModels
{
public class ClienteViewModel
{
public Clienti cliente = new Clienti();
public int NumeroAcquisti;
}
}

nel controller quando scrivo:
public ActionResult NumeroOrdini2()
{
Clienti listclienti = new Clienti();
using (Database1Entities db = new Database1Entities())
{
listclienti = db.Clienti.Select(cliente => new ClienteViewModel { cliente = listclienti,
NumeroAcquisti = listclienti.Acquisti.Count() }).ToList();
return View(listclienti);
}
}

mi da errore, dove sbaglio? :(
Modificato da genny101976 il 22 marzo 2018 22.12 -
16 messaggi dal 24 febbraio 2018
Buongiorno Moreno, rispondo solo oggi perchè sono stato febbricitante, volevo dirti che sono riuscito a far funzionare il tuo suggerimento.
ho capito dove sbagliavo, quindi modificato nuovo model e controller come di seguito:
MODEL
namespace AcquistiVendite.ViewModels
{
public class ClienteViewModel
{
public Clienti Cliente { get; set; }
//Oggetto di classe int che userò nella ActionResult NumeroOrdini2() di ClientiController
public int NumeroAcquisti;
}
}

CONTROLLER
public ActionResult NumeroOrdini()
{
List<ClienteViewModel> cvm = new List<ClienteViewModel>();

using (Database1Entities db = new Database1Entities())
{
cvm = db.Clienti.Select(parametrocliente => new ClienteViewModel { Cliente = parametrocliente, NumeroAcquisti = parametrocliente.Acquisti.Count() }).ToList();
return View(cvm);
}


}


la view sempre dietro tuo suggerimento l'ho tipizzata su :
@model List<AcquistiVendite.ViewModels.ClienteViewModel>

grazie infinite per il tuo sempre prezioso aiuto.
ciao
Genny
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, prego! Bravo per aver risolto il problema

Enjoy learning and just keep making
16 messaggi dal 24 febbraio 2018
Ciao Moreno, scusa il disturbo, volevo farti una domanda,
ho scritto la query in calce, non mi dava errore, ma non estraeva niente, poi ho messo il .ToList() ed ha funzionato, però sinceramente non ho capito il motivo, per tua comodità ti dico: le tabelle sono 3, Clienti, Prodotti e Acquisti, la tabella Acquisti ha relazione Molti a 1 sia con Clienti che con Prodotti, mentre NON c'è relazione fra Clienti e Prodotti.


var result = db.Clienti.SelectMany(parcli => parcli.Acquisti, (cli, acq) =>
new { idcliente = cli.IdCliente,
idacquisti = acq.IdAcquisto,
nomecliente = cli.Nomecliente,
prezzo = acq.PrezzoperQuantita,
idprodotto = acq.Prodotti.IdProdotto,
nomeprodotto = acq.Prodotti.NomeProdotto
} ).ToList();


grazie 1000
Genny
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

ho messo il .ToList() ed ha funzionato, però sinceramente non ho capito il motivo


Leggi qui sulla deferred execution delle query LINQ:
http://forum.aspitalia.com/forum/post/393629/Risultati-Query-Linq.aspx

ciao,
Moreno

Enjoy learning and just keep making

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.