【发布时间】:2015-01-15 17:20:17
【问题描述】:
在 Linq to SQL 查询中让我的 groupby 正确时遇到了问题。
我有 3 张桌子:Customers、Orders 和 OrderItems。 OrderItems 包含所购买商品的数量和价格。
现在我只想列出所有客户以及所有订单的总价。
我有(在许多其他尝试中)这个,但它没有编译。 Intellisense 中没有 TotalPrice 项目,我在最后一行有 ???。
var q = (from c in db.Customers
join o in db.Orders on c.ID equals o.Customer
//join oi in db.OrderItems on o.ID equals oi.OrderID
group c by new {c.CustomerName, TotalPrice = o.OrderItems.Sum(x => x.Quantity * x.Price)} into groupby
select groupby);
foreach (var cust in q)
Console.WriteLine("{0} {1}", cust.Min(x => x.CustomerName), cust.Sum(x => x.???);
(简单、易懂、直接且简单的)SQL 查询将如下所示:
SELECT C.ID, MIN(CustomerName) CustomerName, SUM(Quantity * Price) OrderPrice
FROM Customers C
INNER JOIN ORDERS O ON C.ID = O.Customer
INNER JOIN OrderItems OI ON O.ID = OI.OrderID
GROUP BY C.ID
【问题讨论】:
-
如果表中有外键,使用 LinQ 可以很简单地完成。你有吗?或者你只知道它是什么领域?
-
是的,我确实有外键。所以可以使用外键。
-
实际上你在 SQL 中所做的不是
OrderPrice,而是TotalOrderPriceByCustomer,这就是你想要达到的目标吗?我不知道你为什么使用MIN(CustomerName)而不是将CustomerName添加到GROUP BY。 -
将 CustomerName 添加到 GroupBy 将获得相同的结果,因为 Name 不是 PK 的一部分。我(可能不正确)的理解是 Min 会执行得更快。是的,我正在寻找 TotalOrderPricePerCustomer。
标签: linq linq-to-sql anonymous-types