0

刚从 Entity Framework 开始,并试图弄清楚你将如何做这样的事情......

假设我有以下实体,客户的订单具有链接到产品的 OrderLineItems。我想返回每个客户的姓名以及他们订购特定产品的次数。

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

在此不胜感激。

4

1 回答 1

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

于 2013-11-13T09:48:00.810 回答