次の架空のシナリオを検討してください。
顧客が製品を注文していない場合でも、顧客ごとにすべてのカテゴリ (個別かどうかは関係ありません) のリストを取得するにはどうすればよいでしょうか?
また、ナビゲーション プロパティがないと仮定して、手動結合を使用する必要があります。
これは、ネストを使用する私の試みです:
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
};