2014-01-13 5 views
1

у меня есть две таблицы Заказы и ORDERDETAILS и я пытаюсь группы по имени пользователя, который находится в таблице заказов, а затем сумма величин, который находится в деталях заказагруппа Linq по и сумма с несколькими таблицами

Приказы таблица

|Order ID |Username| 
|1   |User 1 | 
|2   |User 1 | 
|3   |User 2 | 

Детали_Заказов Таблица

|OrderDetailsID| Qty| Order ID| 
|1    | 50 |1  | 
|2    | 20 |1  | 
|3    | 30 |2  | 
|4    | 20 |3  | 

Как я мог получить общее количество сгруппированных пользователем с помощью Linq?

Это то, что я придумал

from order in Entity.Orders 
join od in Entity.OrderDetails on order.ID equals od.OrderID 
where order.Status != 2 
group order by new { order.Username } into users 
select new StatsiticsViewClients() 
{ 
    Username = users.Key.Username, 
    Qty = users.SelectMany(x => x.OrderDetails).Sum(x => x.Qty) 
} 

ответ

4

Вы должны группа od вместо от группировки order, потому что OrderDetails содержит имущество, которое вы пытаетесь суммировать.

И вам не нужно использовать анонимный тип внутри группировки, потому что вы группируете только один столбец.

from order in Entity.Orders 
join od in Entity.OrderDetails on order.ID equals od.OrderID 
where order.Status != 2 
group od by order.Username into users 
select new StatsiticsViewClients() 
{ 
    Username = users.Key, 
    Qty = users.Sum(g => g.Quantity) 
} 
2

Group OrderDetails, а затем вы можете получить сумму, используя g.Sum(x=> x.Qty), а также имя пользователя из поля Ключ группы

from order in Entity.Orders 
    join od in Entity.OrderDetails 
    on order.ID equals od.OrderID 
    where order.Status != 2 
    group OrderDetails by order.Username into g 
    select new StatsiticsViewClients() 
    { 
     Username = g.Key.Username, 
     Qty = g.Sum(x=> x.Qty) 
    } 
+0

Thx это сработало. – owen

Смежные вопросы