これは私を夢中にさせています!簡単にするために、DDD に使用されるコード全体を掲載するつもりはありませんが、私が試したことを公開し、機能していないことを説明するだけです。
私は単純なデータベース構造を持っています:
Products (製品データを保持)
Orders (入力された注文を保持)
OrderProducts (注文と製品の間の参照テーブル)
Order 集計ルートがあり、1 つの単純な Order の製品数を取得したいと考えています。
Order by id をフェッチすると、EF ラムダになります。
var order = _orderRepository.Get(orderId);
次に、次を使用して、その順序で製品の数を取得しようとします。
var count = order.OrderProducts.Count();
この行は、注文に大量のレコードがある場合に詰まります。これは、すべてのレコードを取得しているためです。罰金。そのため、注文内からカウントしたい製品にいくつかのフィルターを追加して、少し洗練しています。製品には、タイプを含むいくつかのプロパティがあります (つまり、タイプ ID があります)。だから、今私はこれを試しています:
//This is trimming down my results to about a dozen products)
var count = order.OrderProduct
.Where(op=>op.Product.TypeId == 2)
.Count();
Linqpad を使用して、生成された SQL の種類を確認すると、驚いたことに、この注文からすべての OrderProducts をまだロードしています!
クエリでフィルターを直接適用するにはどうすればよいですか?