0

假设我们有这样的数据库设计。

Customer
Id  Name
1   John
2   Jack

Order
Id  CustomerId
1   1
2   1
3   2

OrderLine
Id  OrderId  ProductId Quantity
1   1        1         10
2   1        2         20
3   2        1         30
4   3        1         10   

如何创建实体框架查询来计算给定客户订购给定产品的总数量?

Input => CustomerId = 1 & ProductId = 1
Output => 40

这就是我到目前为止所得到的,因为它不完整并且仍然缺少总和。

var db = new ShopTestEntities();
        var orders = db.Orders;
        var details = db.OrderDetails;

        var query = orders.GroupJoin(details,
            order => order.CustomerId,
            detail => detail.ProductId,
            (order, orderGroup) => new
                                   {
                                       CustomerID = order.CustomerId,
                                       OrderCount = orderGroup.Count()
                                   });
4

1 回答 1

0

我发现在进行连接和分组时,使用特殊的 Linq 语法比使用扩展方法风格更容易,所以我希望你不介意我用那种风格编写它。

这是我想到的第一个方法:

int customerId = 1;
int productId = 1;
var query = from orderLine in db.OrderLines
            join order in db.Orders on orderLine.OrderId equals order.Id
            where order.CustomerId == customerId && orderLine.ProductId == productId
            group orderLine by new { order.CustomerId, orderLine.ProductId } into grouped
            select grouped.Sum(g => g.Quantity);

// The result will be null if there are no entries for the given product/customer.
int? quantitySum = query.SingleOrDefault();

我目前无法检查这会生成什么样的 SQL,但我认为它应该是相当合理的。在使用 Linq To Objects 时,我确实检查了它是否给出了正确的结果。

于 2013-09-08T13:53:47.120 回答