3

次の架空のシナリオを検討してください。

実体関係図

顧客が製品を注文していない場合でも、顧客ごとにすべてのカテゴリ (個別かどうかは関係ありません) のリストを取得するにはどうすればよいでしょうか?

また、ナビゲーション プロパティがないと仮定して、手動結合を使用する必要があります。

これは、ネストを使用する私の試みです:

var customerCategories = from c in context.Customers
                         join o in context.Orders on c.CustomerId equals o.CustomerId into orders
                         select new
                         {
                             CustomerName = c.Name,
                             Categories = (from o in orders
                                           join p in context.Products on o.ProductId equals p.ProductId
                                           join cat in context.Category on p.CategoryId equals cat.CategoryId
                                           select cat)
                         };

同じ結果を達成するための別の (おそらくより良い方法) はありますか?

代替手段: 複数の左 (グループ) 結合

var customerCategories = from customer in context.Customers
                         join o in context.Orders on customer.CustomerId equals o.CustomerId into orders
                         from order in orders.DefaultIfEmpty()
                         join p in context.Products on order.ProductId equals p.ProductId into products
                         from product in products.DefaultIfEmpty()
                         join cat in context.Categories on product.CategoryId equals cat.CategoryId into categories
                         select new
                         {
                             CustomerName = c.Name,
                             Categories = categories
                         };
4

2 に答える 2