var categoriesAndProducts =
  from c in categories
  join p in products on c.IdCategory equals p.IdCategory
    into productsByCategory
  select new {
    c.IdCategory,
    CategoryName = c.Name,
    Products = productsByCategory
  };
  
foreach (var category in categoriesAndProducts) {
  Console.WriteLine("{0} - {1}", category.IdCategory,  category.CategoryName);
  foreach (var product in category.Products) {
    Console.WriteLine("\t{0}", product.Description);
  }
}
