刚开始使用Entity Framework,我正在尝试解决你将如何做这样的事情......
假设我有以下实体,即拥有订单的客户,这些订单包含与产品相关联的OrderLineItems。我想回复每个客户的名字,并计算他们订购特定产品的次数。
我见过使用.Count()的示例,但这些示例一直是第一个导航属性,即每个客户的订单数量。
会在此感谢一些指导。
答案 0 :(得分:0)
这样的事情应该有用,context
是DbContext
个实例。
它将返回IEnumerable<dynamic>
,但显然你可以创建一个类来保存结果。
// The product to count
var productId = 12345;
context.Customers.Include("Orders.OrderLineItems.Products")
.Select(customer =>
new {
CustomerName = customer.Name,
ProductCount = customer.Orders
.SelectMany(o => o.OrderLineItems)
.SelectMany(i => i.Products.Where(p => p.Id = productId).Count()
});
Include()
扩展方法很有用,它将确保生成的SQL查询将相关表连接在一起 - 否则将为每个客户执行多个查询(一个用于获取订单,另一个用于订单项和一个最后一个产品)。