我有一个包含客户列表的表,第二个表包含我的客户下的订单,第三个表包含订单的订单项。
我希望能够使用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查询是什么?
答案 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}
这将使用您请求的数据投射新的匿名类型。