C# で linq クエリを作成しようとしています。これは、注文したすべてのアイテムを受け取ったが、それを理解できない顧客のリストを返します。
私のデータベース スキーマは次のようになります:
テーブル名: Customers、プライマリ フィールド: CustomerId
テーブル名: Orders、プライマリ フィールド: OrderId、外部キー: CustomerId
テーブル名: OrderLineItems、プライマリ フィールド: LineItemId、外部キー: OrderId
ラインアイテムテーブルには、このアイテムが「注文済み」、「バックオーダー済み」、「発送済み」などであるかどうかを示す「ステータス」というフィールドもあります。
私が探しているのは、少なくとも 1 つの注文がある顧客のリストです (何も注文していない顧客には興味がありません)。少なくとも 1 つのアイテムがある注文にのみ関心があります (誰かが最後に、私の最後の基準は、すべてのアイテムが特定のステータス (たとえば、「発送済み」など) を持っている必要があるということです。
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;