刚从 Entity Framework 开始,并试图弄清楚你将如何做这样的事情......
假设我有以下实体,客户的订单具有链接到产品的 OrderLineItems。我想返回每个客户的姓名以及他们订购特定产品的次数。
我见过使用 .Count() 的例子,但这些总是用于第一个导航属性,即每个客户的订单数。
在此不胜感激。
刚从 Entity Framework 开始,并试图弄清楚你将如何做这样的事情......
假设我有以下实体,客户的订单具有链接到产品的 OrderLineItems。我想返回每个客户的姓名以及他们订购特定产品的次数。
我见过使用 .Count() 的例子,但这些总是用于第一个导航属性,即每个客户的订单数。
在此不胜感激。
像这样的东西应该可以工作,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 查询将相关表连接在一起 - 否则将为每个客户执行多个查询(一个用于获取订单,另一个用于订单项,最后一个用于产品)。