示例#1
0
        static void ZipOperation()
        {
            var racerNames = from r in Formula1.GetChampions()
                             where r.Country == "Italy"
                             orderby r.Wins descending
                             select new
            {
                Name = r.FirstName + " " + r.LastName
            };

            var racerNamesAndStarts = from r in Formula1.GetChampions()
                                      where r.Country == "Italy"
                                      orderby r.Wins descending
                                      select new
            {
                LastName = r.LastName,
                Starts   = r.Starts
            };


            //var racers = racerNames.Zip(racerNamesAndStarts, (first, second) => first.Name + ", starts: " + second.Starts);
            //foreach (var r in racers)
            //{
            //    Console.WriteLine(r);
            //}
        }
示例#2
0
        static void GroupingWithNestedObjects()
        {
            var countries = from r in Formula1.GetChampions()
                            group r by r.Country into g
                            orderby g.Count() descending, g.Key
                where g.Count() >= 2
            select new
            {
                Country = g.Key,
                Count   = g.Count(),
                Racers  = from r1 in g
                          orderby r1.LastName
                          select r1.FirstName + " " + r1.LastName
            };

            foreach (var item in countries)
            {
                Console.WriteLine("{0, -10} {1}", item.Country, item.Count);
                foreach (var name in item.Racers)
                {
                    Console.Write("{0}; ", name);
                }
                Console.WriteLine();
            }
        }
示例#3
0
        static void IndexFiltering()
        {
            var racers = Formula1.GetChampions().
                         Where((r, index) => r.LastName.StartsWith("A") && index % 2 != 0);

            foreach (var r in racers)
            {
                Console.WriteLine("{0:A}", r);
            }
        }
示例#4
0
        static void Filtering()
        {
            var racers = from r in Formula1.GetChampions()
                         where r.Wins > 15 && (r.Country == "Brazil" || r.Country == "Austria")
                         select r;

            foreach (var r in racers)
            {
                Console.WriteLine("{0:A}", r);
            }
        }
示例#5
0
        static void CompoundFrom()
        {
            var ferrariDrivers = from r in Formula1.GetChampions()
                                 from c in r.Cars
                                 where c == "Ferrari"
                                 orderby r.LastName
                                 select r.FirstName + " " + r.LastName;

            foreach (var racer in ferrariDrivers)
            {
                Console.WriteLine(racer);
            }
        }
示例#6
0
        static void Untyped()
        {
            var list = new System.Collections.ArrayList(Formula1.GetChampions() as System.Collections.ICollection);

            var query = from r in list.Cast <Racer>()
                        where r.Country == "USA"
                        orderby r.Wins descending
                        select r;

            foreach (var racer in query)
            {
                Console.WriteLine("{0:A}", racer);
            }
        }
示例#7
0
        static void SetOperations()
        {
            Func <string, IEnumerable <Racer> > racersByCar =
                car => from r in Formula1.GetChampions()
                from c in r.Cars
                where c == car
                orderby r.LastName
                select r;

            Console.WriteLine("World champion with Ferrari and McLaren");
            foreach (var racer in racersByCar("Ferrari").Intersect(racersByCar("McLaren")))
            {
                Console.WriteLine(racer);
            }
        }
示例#8
0
        static void Aggregate()
        {
            var query = from r in Formula1.GetChampions()
                        where r.Years.Count() > 3
                        orderby r.Years.Count() descending
                        select new
            {
                Name          = r.FirstName + " " + r.LastName,
                TimesChampion = r.Years.Count()
            };

            foreach (var r in query)
            {
                Console.WriteLine("{0} {1}", r.Name, r.TimesChampion);
            }
        }
示例#9
0
        static void Grouping()
        {
            var countries = from r in Formula1.GetChampions()
                            group r by r.Country into g
                            orderby g.Count() descending, g.Key
                where g.Count() >= 2
            select new
            {
                Country = g.Key,
                Count   = g.Count()
            };

            foreach (var item in countries)
            {
                Console.WriteLine("{0, -10} {1}", item.Country, item.Count);
            }
        }
示例#10
0
        static void Aggregate2()
        {
            var countries = (from c in
                             from r in Formula1.GetChampions()
                             group r by r.Country into c
                             select new
            {
                Country = c.Key,
                Wins = (from r1 in c
                        select r1.Wins).Sum()
            }
                             orderby c.Wins descending, c.Country
                             select c).Take(5);

            foreach (var country in countries)
            {
                Console.WriteLine("{0} {1}", country.Country, country.Wins);
            }
        }
示例#11
0
        static void Join()
        {
            var racers = from r in Formula1.GetChampions()
                         from y in r.Years
                         where y > 2003
                         select new
            {
                Year = y,
                Name = r.FirstName + " " + r.LastName
            };

            var teams = from t in
                        Formula1.GetContructorChampions()
                        from y in t.Years
                        where y > 2003
                        select new
            {
                Year = y,
                Name = t.Name
            };

            var racersAndTeams =
                from r in racers
                join t in teams on r.Year equals t.Year
                select new
            {
                Year  = r.Year,
                Racer = r.Name,
                Team  = t.Name
            };

            Console.WriteLine("Year  Champion " + "Constructor Title");
            foreach (var item in racersAndTeams)
            {
                Console.WriteLine("{0}: {1,-20} {2}",
                                  item.Year, item.Racer, item.Team);
            }
        }
示例#12
0
        static void Partitioning()
        {
            int pageSize = 5;

            int numberPages = (int)Math.Ceiling(Formula1.GetChampions().Count() /
                                                (double)pageSize);

            for (int page = 0; page < numberPages; page++)
            {
                Console.WriteLine("Page {0}", page);

                var racers =
                    (from r in Formula1.GetChampions()
                     orderby r.LastName
                     select r.FirstName + " " + r.LastName).
                    Skip(page * pageSize).Take(pageSize);

                foreach (var name in racers)
                {
                    Console.WriteLine(name);
                }
                Console.WriteLine();
            }
        }