static void Main()
        {
            var context = new GeographyEntities();

            var counties = context.Countries;

            var countriesQuery = counties
                .Where(c => c.Monasteries.Any())
                .OrderBy(c => c.CountryName)
                .Select(c => new
                {
                    c.CountryName,
                    Monasteries = c.Monasteries
                        .OrderBy(m => m.Name)
                        .Select(m => m.Name)
                });
            foreach (var country in countriesQuery)
            {
                Console.WriteLine("{0} {1}", country.CountryName, string.Join(", ", country.Monasteries));
            }

            var xmlMonasteries = new XElement("monasteries");

            foreach (var country in countriesQuery)
            {
                var xmlCountry = new XElement("country");
                xmlCountry.Add(new XAttribute("name", country.CountryName), country.Monasteries
                                                .Select(m => new XElement("monastery", m)));

                xmlMonasteries.Add(xmlCountry);
            }

            var xmlDoc = new XDocument(xmlMonasteries);
            xmlDoc.Save("monasteries.xml");
        }
        static void Main()
        {
            var context = new GeographyEntities();

            var rivers = context.Rivers
                .OrderByDescending(r => r.Length)
                .Select(r => new
                {
                    r.RiverName,
                    r.Length,
                    Countries = r.Countries
                        .OrderBy(c => c.CountryName)
                        .Select(c => c.CountryName)
                });

            var riversToJson = new JavaScriptSerializer();
            var result = riversToJson.Serialize(rivers.ToList());
            Console.WriteLine(result);

            System.IO.File.WriteAllText(@"rivers.json", result);
        }