0

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;
4

1 に答える 1