2012-04-25 61 views
10

Deseo seleccionar la suma de todos los precios (pagos) de un artículo de pedido para cada cliente. Aquí es de comandos SQL:GROUP y SUM en 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; 

No sé cómo hacer esto en EF. resultado Ejemplo:

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

(coma se utiliza como el precio point..because decimal es un valor decimal)

Respuesta

18

El resultado de su ejemplo no parece coincidir con su comando SQL, pero creo que busca algo como esto:

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

Muchas gracias de nuevo. Eres mi protector :) ¿Por qué no parece coincidir? SELECCIONE c.nombre, SUMA() -> para que haya un nombre y un decimal. – quin61

+0

@ quin61 - No hay problema. El comando SQL dará como resultado dos columnas (Nombre, Suma). En su ejemplo, parece que hay 3 columnas (nombre, número, número). A menos que no esté entendiendo correctamente, la coma se usa para – Aducci

+0

La coma se usa como punto decimal. Ahora veo, es un poco confuso. Editaré esa publicación – quin61