实体框架导航属性的条件计数2级别下降

时间:2013-11-13 09:31:12

标签: entity-framework frameworks count entity

刚开始使用Entity Framework,我正在尝试解决你将如何做这样的事情......

假设我有以下实体,即拥有订单的客户,这些订单包含与产品相关联的OrderLineItems。我想回复每个客户的名字,并计算他们订购特定产品的次数。

我见过使用.Count()的示例,但这些示例一直是第一个导航属性,即每个客户的订单数量。

会在此感谢一些指导。

1 个答案:

答案 0 :(得分:0)

这样的事情应该有用,contextDbContext个实例。

它将返回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查询将相关表连接在一起 - 否则将为每个客户执行多个查询(一个用于获取订单,另一个用于订单项和一个最后一个产品)。