Il linguaggio Visual Basic di Microsoft
 

Code First, Linq somma a due livelli

Andrea (Work) 14 Set 2015 14:24
Buongiorno a tutti,
sto approcciando Linq con EF6 in modalità Code First (db SQLCE 4.0)

C'è un qualcosa che non mi è molto chiaro.
Ho queste classi
Cliente (ordini), Ordine (Rows), RigheOrdine. Quest'ultima ha una proprietà
Prezzo.
Sono presenti tutte le proprietà di navigazione fra le entità.

Vorrei tirar fuori, dato un cliente, quante righe mi ha ordinato, e la
somma del prezzo.

Dim IdCli as long=1
Using ctx as new MyContext
ctx.clienti.find(IdCli).Ordini.Sum(function (t) t.Rows.sum(Function (r)
r.Prezzo))
End Using

Non sembra funzionare, mi da 0 credo a causa del LazyLoading.

Ho fatto una query che ora riscrivo a braccio, ma non riesco a ottenere
tutto il totale, ma solo il totale per ogni ordine. A questo punto mi tocca
ciclare con un For Each. Qualcosa tipo

Dim q = From c in ctx.Clienti
From o in ctx.Ordini
Where c.id=IdCli
Select CountPr= o.Rows.Count, TotPr= o.Rows.Sum(function (t) t.Prezzo)

Bene se poi faccio un
Dim TotPrezzo as decimal = q.Sum(Function (t) t.TotPr))

Bene EF mi blocca dicendo che non è in grado di risolvere la query. Ho
provato a guardare il log e viene fuori qualcosa di improponibile rispetto
a quanto farei io con del semplice SQL.

Come fareste voi?
Grazie

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio Visual Basic di Microsoft | Tutti i gruppi | it.comp.lang.visual-basic | Notizie e discussioni visual basic | Visual basic Mobile | Servizio di consultazione news.