private void Snippet_LinqSelect(List <Buddy> buddies)
        {
            IEnumerable <string> namelist = buddies
                                            .Select(buddy => buddy.Name);

            ConsoleTools.WriteCollection(namelist);
            // [Sylvester, Bogdan, Mark, Robert, Akos, Sergey]
        }
        private void Snippet_LinqWhere(List <Buddy> buddies)
        {
            var polishBuddies = buddies
                                .Where(buddy => buddy.Country == "Poland");

            ConsoleTools.WriteCollection(polishBuddies);
            // [7=Bogdan (Poland), 2=Robert (Poland)]
        }
        private void Snippet_LinqDistinct(List <Buddy> buddies)
        {
            var countries = buddies
                            .Select(buddy => buddy.Country)
                            .Distinct();

            ConsoleTools.WriteCollection(countries);
            // [UK, Poland, Ukraine]
        }
        private void Snippet_LinqOrderByDescending_ThenBy(List <Buddy> buddies)
        {
            var buddiesOrdered = buddies
                                 .OrderByDescending(buddy => buddy.Country)
                                 .ThenBy(buddy => buddy.Name);

            ConsoleTools.WriteCollection(buddiesOrdered);
            // [9=Sergey (Ukraine), 6=Akos (UK), 3=Mark (UK), 1=Sylvester (UK), 7=Bogdan (Poland), 2=Robert (Poland)]
        }
        public void Run()
        {
            var buddies = new List <Buddy> {
                new Buddy(1, "Sylvester", "UK"),
                new Buddy(7, "Bogdan", "Poland", 51000.00m),
                new Buddy(3, "Mark", "UK", 65000.00m),
                new Buddy(2, "Robert", "Poland", 43000.00m),
                new Buddy(6, "Akos", "UK", 49000.00m),
                new Buddy(9, "Sergey", "Ukraine", 34000.00m)
            };

            ConsoleTools.WriteCollection(buddies);
            Snippet_LinqSelect(buddies);
            Snippet_LinqDistinct(buddies);
            Snippet_LinqAggregate(buddies);
            Snippet_LinqWhere(buddies);
            Snippet_LinqCount(buddies);
            Snippet_LinqAll(buddies);
            Snippet_LinqSumAvgMax(buddies);
            Snippet_LinqOrderByDescending_ThenBy(buddies);
        }
        private void Snippet_LinqAggregate(List <Buddy> buddies)
        {
            var buddiesByCountry = buddies
                                   .Aggregate <Buddy, Dictionary <string, int> >(
                new Dictionary <string, int>(),
                (dict, buddy) =>
            {
                if (dict.ContainsKey(buddy.Country))
                {
                    dict[buddy.Country] += 1;
                }
                else
                {
                    dict[buddy.Country] = 1;
                }
                return(dict);
            }
                );
            var printlist = buddiesByCountry
                            .Select(pair => $"{pair.Key}={pair.Value}");

            ConsoleTools.WriteCollection(printlist);
            // [UK=3, Poland=2, Ukraine=1]
        }