2014-01-13 50 views
1

我有兩個表的訂單和訂單明細,我由在訂單詳情中發現這是在訂單表,然後量的和發現的用戶名試圖組LINQ的GROUP BY和總和與多個表

Orders表

|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

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