koko ha scritto:
innanzitutto l'ID e il NumeroClienti Sono le chiavi per incrociare le due tabelle.
E fino a qui potremmo esserci, anche se non è chiaro il motivo per cui vi sono due chiavi al posto di una sola per correlare le due tabelle.
koko ha scritto:
Poi successivamente devo raggruppare per id e NumeroClienti
Se raggruppi per i campi che hai detto, troverai N gruppi ciascuno per ogni cliente che contiene al suo interno N fatture che sono quelle del cliente. Questo è corretto?
koko ha scritto:
(l'iD non è ricorsivo ma mi serve per individuare il cliente che ha un codice formato da id + numeroclienti)
Forse volevi dire che non è
univoco, non ricorsivo.
koko ha scritto:
Raggruppo per ID e NumeroClienti
Quindi voglio estrarre le fatture del singolo cliente ( quindi devo avere una riga per cliente).
Questo vuol dire che ciascuna riga riporterà i dati del cliente, mentre per le fatture potrai avere solo degli "aggregati", altrimenti le righe diventeranno N*N (ossia N clienti per N fatture).
koko ha scritto:
Praticamente:
Id|NumeroCliente |Importo |Nome| Cognome| Telefono
Spero di essere stato chiaro.
Diciamo di no, perché continui a parlare del procedimento, che abbiamo assodato essere probabilmente errato, mentre non ti limiti a dire quello che vorresti.
Ad esempio, dalle colonne che hai indicato sopra nel tuo messaggio, se dici di volere una riga per cliente, la colonna dell'importo dovrà contenere una somma, mentre gli altri campi sono quelli del cliente che vanno riportati una volta sola nei risultati, altrimenti non avrai (così come chiedi) una riga per cliente.
Se tu dicessi
"voglio avere l'elenco di tutti i clienti e per ciascuno la somma degli importi delle fatture correlate a esso" (per fare un esempio), la finalità sarebbe ben comprensibile, e l'espressione verrebbe di conseguenza.
Ad ogni modo, provo a tenere conto di ciò che ho capito io e ti propongo questa espressione, così vediamo se almeno ci avviciniamo:
[CODE]
var query = from a in Fattura
join c in Cliente on new { a.Id, a.NumeroCliente } equals new { c.Id, c.NumeroCliente }
group new { DatiCliente = c, DatiFattura = a } by new { a.Id, a.NumeroCliente } into g
select new
{
Id = g.Key.Id,
NumeroCliente = g.Key.NumeroCliente,
Nome = g.First().DatiCliente.Nome,
Cognome = g.First().DatiCliente.Cognome,
Telefono = g.First().DatiCliente.Telefono,
Importo = g.Sum(o => o.DatiFattura.Importo),
ConteggioFatture = g.Count()
};
Ciao!