2012-04-25 11 views
10

Desidero selezionare la somma di tutti i prezzi (a pagamento) di un articolo dell'ordine per ciascun cliente. Ecco comando SQL:GROUP e SUM in Entity Framework

SELECT c.name,SUM(oi.price * oi.count) from customer c 
JOIN order o ON c.id=o.customer_id 
JOIN order_item oi ON o.id=oi.order_id 
JOIN bill b ON b.id=oi.bill_id 
WHERE b.payment_id is NOT null 
GROUP by c.name; 

non so come fare a EF. risultato Esempio:

John Smith 1500,2 
Allan Babel 202,0 
Tina Crown 3500,78 

(virgola è usata come prezzo point..because decimale è valore decimale)

risposta

18

Il risultato esempio non sembra abbinare il vostro comando SQL, ma penso che si sta cercando qualcosa del genere:

var query = from c in context.Customers 
      join o in context.Orders on c.id equals o.customer_id 
      join oi in context.OrderItems on o.id equals oi.order_id 
      join b in context.bill on oi.bill_id equals b.id 
      where b.payment_id != null 
      group oi by c.name into g 
      select new 
      { 
       Name = g.Key, 
       Sum = g.Sum(oi => oi.price * oi.count), 
      } 
+0

Grazie mille ancora. Sei il mio risparmiatore :) Perché non sembra corrispondere? SELECT c.name, SUM() -> quindi ci sarà il nome e alcuni decimali. – quin61

+0

@ quin61 - Nessun problema. Il comando SQL genererà due colonne (Nome, Somma). Nel tuo esempio sembrano esserci 3 colonne (Nome, Numero, Numero). A meno che non abbia frainteso ciò che la virgola è usata per – Aducci

+0

Virgola è usata come punto decimale. Ora vedo - è un po 'confuso. Modificherò quel post – quin61