2012-04-25 2 views
10

Я хочу выбрать сумму всех (оплаченных) цен на позицию заказа для каждого клиента. Вот команда SQL:GROUP and 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; 

Я не знаю, как сделать это в EF. Примера результат:

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

(запятая используются в качестве десятичных цен point..because десятичного значения)

ответ

18

Вашего примера результат не кажется, чтобы соответствовать вашей команде SQL, но я думаю, что вы ищете что-то вроде этого:

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

Еще раз спасибо. Вы - моя заставка :) Почему, похоже, не соответствует? SELECT c.name, SUM() ->, поэтому будет имя и некоторое десятичное число. – quin61

+0

@ quin61 - проблем нет. Команда SQL приведет к двум столбцам (Name, Sum). В вашем примере, кажется, 3 столбца (Имя, Число, Число). Если я не понимаю, что запятая используется для – Aducci

+0

Запятая используется как десятичная точка. Теперь я вижу - его мало смущает. Я отредактирую этот пост – quin61