我正在尝试在 C# 中编写一个 linq 查询,它将返回收到他们订购的所有商品但无法弄清楚的客户列表
我的数据库架构如下所示:
表名:客户,主字段:CustomerId
表名:订单,主字段:OrderId,外键:CustomerId
表名:OrderLineItems,主字段:LineItemId,外键:OrderId
订单项表还有一个名为“状态”的字段,我在其中指出该项目是否已“订购”、“延期交货”、“已发货”等。
我正在寻找的是至少有一个订单的客户列表(我对没有订购任何东西的客户不感兴趣),我只对至少有一个项目的订单感兴趣(以防万一有人创建没有任何物品的空订单),最后我的最后一个标准是所有物品都必须具有给定的状态(例如:“已发货”)。
如果我要编写 SQL 查询,它看起来像这样:
SELECT c.*
FROM Customers c
INNER JOIN Orders o ON c.CustomerId = o.CustomerId
INNER JOIN (SELECT oli.OrderId, COUNT(*) AS [NumberOfItems] FROM OrderLineItems oli WHERE oli.Status <> 'Shipped' GROUP BY oli.OrderId) items ON o.OrderId = items.OrderId
WHERE items.NumberOfItems = 0
(顺便说一句,如果您能想到更好的方法来获取我正在寻找的数据,请随意提出更好的 SQL 查询)
理想情况下,我会得到如下所示的 C# 代码:
var customers = from c in context.Customers
where ...
select c;