要检索的Linq查询:Customers,Orders和OrderLineItems

时间:2009-09-19 17:22:19

标签: linq

我有一个包含客户列表的表,第二个表包含我的客户下的订单,第三个表包含订单的订单项。

我希望能够使用Linq查询来获取客户名称,订单数量以及该客户下达的所有订单的总价值。

假设以下数据:

[Customers]
CustomerId Name
---------------------
1          Bob Smith
2          Jane Doe

[Orders]
OrderId  CustomerId
---------------------
1        1
2        1
3        2

[OrderLineItems]
LineItemId  OrderId  UnitPrice  Quantity
--------------------------------------------
1           1        5          2
2           1        2          3
3           2        10         10
4           2        4          2
5           3        2          5

我想要以下结果:

Name       OrdersCount  TotalValue
--------------------------------------------
Bob Smith  2            124
Jane Doe   1            10

获得此结果的Linq查询是什么?

1 个答案:

答案 0 :(得分:1)

如果您假设您有一个强类型的datacontext和一个可以自由添加的部分类Customer,我会像这样解决这个问题:

public partial class Customer {

   public int NumberOfOrders {
      get { return Orders.Count(); } 
   }

   public int TotalValue {
      get { return Orders.OrderLineItems.Sum( o => o.UnitPrice * o.Quantity); }
   }
}

YourDataContext db = new YourDataContext();

 var query = from c in db.Customers
select new {c.Name, c.NumberOfOrders, 
c.TotalValue}

这将使用您请求的数据投射新的匿名类型。