2012-04-25 21 views
10

Tôi muốn chọn tổng của tất cả (đã trả) giá của một mục đặt hàng cho từng khách hàng. Đây là lệnh SQL:GROUP và SUM trong khung thực thể

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; 

Tôi không biết cách thực hiện điều này trong EF. Ví dụ kết quả:

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

(dấu phẩy được sử dụng như giá point..because thập phân là giá trị thập phân)

Trả lời

18

kết quả ví dụ của bạn dường như không phù hợp với lệnh SQL của bạn, nhưng tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như thế này:

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

Cảm ơn rất nhiều lần nữa. Bạn là người bảo vệ của tôi :) Tại sao dường như không phù hợp? CHỌN c.name, SUM() -> do đó sẽ có tên và một số số thập phân. – quin61

+0

@ quin61 - Không sao cả. Lệnh SQL sẽ dẫn đến hai cột (Tên, Tổng). Trong ví dụ của bạn có vẻ là 3 cột (Tên, Số, Số). Trừ khi tôi hiểu sai dấu phẩy được sử dụng cho – Aducci

+0

Dấu phẩy được sử dụng làm dấu thập phân. Bây giờ tôi thấy - hơi khó hiểu của nó. Tôi sẽ chỉnh sửa bài đăng đó – quin61