2

Linq to Entities を使用して、注文が存在しないカテゴリを見つけようとしています。

 TABLE Customer              TABLE Order
------------------         ----------------
CustId   Category          OrderId FKCustId
  1         2                 1       1
  2         2
  3         3

これは、典型的な 1 対多の顧客/注文関係です。このデータを考えると、カテゴリ 3 だけに注文が関連付けられていないため、カテゴリ 3 を唯一のアイテムとして結果セットを生成したいと考えています。これは書くのが簡単なクエリでなければなりませんが、私はそれを理解することができませんでした. 私はたくさんの異なる角度を試しました。これはうまくいかなかったものです:

var dtos = ctx.Customers
       .GroupBy(c => c.Category)
       .Where(c => !c.Any(c2 => !c2.Orders.Any()))
       .Select(c => c.Key);

これを試してみたところ、注文がないカテゴリは返されませんでしたが、注文のあるカテゴリが返されました。

助けてくれてありがとう!ロジャー

4

2 に答える 2

1

あなたのクエリは近いですが、それに!Any続くもの!Anyはあなたのロジックを捨てています。すべての顧客が注文していないカテゴリを選択したいと考えています。ただし、クエリは、注文のない顧客がいないすべてのカテゴリを選択します。I hope that made sense

!Any最初を次のように変更してみてくださいAll:

var dtos = ctx.Customers
   .GroupBy(c => c.Category)
   .Where(c => c.All(c2 => !c2.Orders.Any()))
   .Select(c => c.Key);

またはクエリ構文で:

var dtos = 
    from c in Customers
    group c by c.Category into g
    where g.All(c => !c.Orders.Any())
    select g.Key;

または、秒!Anyを に変更しAnyます。

var dtos = ctx.Customers
   .GroupBy(c => c.Category)
   .Where(c => !c.Any(c2 => c2.Orders.Any()))
   .Select(c => c.Key);

またはクエリ構文で:

var dtos = 
    from c in Customers
    group c by c.Category into g
    where !g.Any(c => c.Orders.Any())
    select g.Key;
于 2013-03-30T00:55:24.887 に答える
0

最初に注文のない顧客を取得し、次にカテゴリを取得する必要があります。まず自分の場所を調べてから、カテゴリを取得します

于 2013-03-30T00:54:58.380 に答える