static void XMain(string[] args)
        {
            var filmes    = GetFilmes();
            var diretores = GetDiretores();

            var novoFilme = new Filme
            {
                Titulo  = "A Fantástica Fábrica de Chocolate",
                Ano     = 2005,
                Diretor = new Diretor {
                    Id = 3, Nome = "Tim Burton"
                },
                DiretorId = 3,
                Minutos   = 115
            };

            filmes.Add(novoFilme);

            Console.WriteLine("\nTodos os filmes");
            Console.WriteLine("===============");
            Imprimir(filmes);



            Console.WriteLine("\nFiltrando por nome de diretor");
            Console.WriteLine("=============================");
            //var consulta =
            //    from f in filmes
            //    where f.Diretor.Nome == "Tim Burton"
            //    select f;

            var consulta =
                filmes.Where(f => f.Diretor.Nome == "Tim Burton");


            Imprimir(consulta);


            Console.WriteLine("\nFiltrando e projetando resultado");
            Console.WriteLine("================================");
            //var consulta2 =
            //    from f in filmes
            //    where f.Diretor.Nome == "Tim Burton"
            //    select new FilmeResumido
            //    {
            //        Titulo = f.Titulo,
            //        Diretor = f.Diretor.Nome
            //    };
            var consulta2 =
                filmes
                .Where(f => f.Diretor.Nome == "Tim Burton")
                .Select(f => new FilmeResumido
            {
                Titulo  = f.Titulo,
                Diretor = f.Diretor.Nome
            });

            foreach (var item in consulta2)
            {
                Console.WriteLine("{0} - {1}", item.Titulo, item.Diretor);
            }


            Console.WriteLine("\nRelacionando duas sequências");
            Console.WriteLine("============================");

            //var consulta4 =
            //    from f in filmes
            //    join d in diretores
            //        on f.DiretorId equals d.Id
            //    where f.Diretor.Nome == "Tim Burton"
            //    select new //OBJETO ANÔNIMO
            //    {
            //        f.Titulo,
            //        Diretor = d.Nome
            //    };

            var consulta4 =
                filmes
                .Join(diretores,
                      f => f.DiretorId,
                      d => d.Id,
                      (f, d) => new { f, d })
                .Where(x => x.f.Diretor.Nome == "Tim Burton")
                .Select(x => new //OBJETO ANÔNIMO
            {
                x.f.Titulo,
                Diretor = x.d.Nome
            });

            Console.WriteLine($"{"Título",-40} {"Diretor",-20}");
            Console.WriteLine(new string('=', 64));
            foreach (var filme in consulta4)
            {
                Console.WriteLine($"{filme.Titulo,-40} {filme.Diretor,-20}");
            }
            Console.WriteLine();


            Console.WriteLine("\nAgrupando consulta");
            Console.WriteLine("==================");
            var consulta5 =
                from f in filmes
                join d in diretores
                on f.DiretorId equals d.Id
                group f by d
                into agrupado
                select new //OBJETO ANÔNIMO
            {
                Diretor    = agrupado.Key,
                Quantidade = agrupado.Count(),
                Total      = agrupado.Sum(f => f.Minutos),
                Min        = agrupado.Min(f => f.Minutos),
                Max        = agrupado.Max(f => f.Minutos),
                Media      = (int)agrupado.Average(f => f.Minutos)
            };

            Console.WriteLine(
                $"{"Nome",-30}" +
                $"\t{"Qtd"}" +
                $"\t{"Total"}" +
                $"\t{"Min"}" +
                $"\t{"Max"}" +
                $"\t{"Media"}");
            foreach (var item in consulta5)
            {
                Console.WriteLine(
                    $"{item.Diretor.Nome,-30}" +
                    $"\t{item.Quantidade}" +
                    $"\t{item.Total}" +
                    $"\t{item.Min}" +
                    $"\t{item.Max}" +
                    $"\t{item.Media}");
            }

            Console.ReadKey();
        }
示例#2
0
        private static void XMain(string[] args)
        {
            var filmes    = GetFilmes();
            var diretores = GetDiretores();

            var novoFilme = new Filme
            {
                Titulo  = "A Fantástica Fábrica de Chocolate",
                Ano     = 2005,
                Diretor = new Diretor {
                    Id = 3, Nome = "Tim Burton"
                },
                DiretorId = 3,
                Minutos   = 115
            };

            filmes.Add(novoFilme);

            Imprimir(filmes);

            //LINQ = CONSULTA INTEGRADA À LINGUAGEM

            //SELECT f.*
            //FROM filmes AS f  //ALIAS
            //WHERE f.Diretor = "Tim Burton"

            var consulta =
                from f in filmes
                where f.Diretor.Nome == "Tim Burton"
                select f;

            Imprimir(consulta);

            //SELECT f.Nome AS Titulo, f.Diretor
            //FROM filmes AS f  //ALIAS
            //WHERE f.Diretor = "Tim Burton"

            var consulta2 =
                from f in filmes
                where f.Diretor.Nome == "Tim Burton"
                select new FilmeResumido
            {
                Titulo  = f.Titulo,
                Diretor = f.Diretor.Nome
            };

            Imprimir(consulta2);

            var consulta3 =
                from f in filmes
                where f.Diretor.Nome == "Tim Burton"
                select new //OBJETO ANÔNIMO
            {
                f.Titulo,
                Diretor = f.Diretor.Nome
            };

            Console.WriteLine($"{"Título",-40} {"Diretor",-20}");
            Console.WriteLine(new string('=', 64));
            foreach (var filme in consulta3)
            {
                Console.WriteLine($"{filme.Titulo,-40} {filme.Diretor,-20}");
            }
            Console.WriteLine();

            //SELECT f.Nome AS Titulo, d.Nome AS Diretor
            //FROM filmes AS f  //ALIAS
            //INNER JOIN diretores AS d
            //  ON d.Id = f.DiretorId
            //WHERE d.Nome = "Tim Burton"

            var consulta4 =
                from f in filmes
                join d in diretores
                on f.DiretorId equals d.Id
                where f.Diretor.Nome == "Tim Burton"
                select new //OBJETO ANÔNIMO
            {
                f.Titulo,
                Diretor = d.Nome
            };

            Console.WriteLine($"{"Título",-40} {"Diretor",-20}");
            Console.WriteLine(new string('=', 64));
            foreach (var filme in consulta4)
            {
                Console.WriteLine($"{filme.Titulo,-40} {filme.Diretor,-20}");
            }
            Console.WriteLine();

            //SELECT d.Nome AS Diretor, COUNT(*) AS Quantidade
            //FROM filmes AS f  //ALIAS
            //INNER JOIN diretores AS d
            //  ON d.Id = f.DiretorId
            //GROUP BY d.Id

            var consulta5 =
                from f in filmes
                join d in diretores
                on f.DiretorId equals d.Id
                group f by d
                into agrupado
                select new //OBJETO ANÔNIMO
            {
                Diretor    = agrupado.Key,
                Quantidade = agrupado.Count(),
                Total      = agrupado.Sum(f => f.Minutos),
                Min        = agrupado.Min(f => f.Minutos),
                Max        = agrupado.Max(f => f.Minutos),
                Media      = (int)agrupado.Average(f => f.Minutos)
            };

            Console.WriteLine(
                $"{"Nome",-30}" +
                $"\t{"Qtd"}" +
                $"\t{"Total"}" +
                $"\t{"Min"}" +
                $"\t{"Max"}" +
                $"\t{"Media"}");
            foreach (var item in consulta5)
            {
                Console.WriteLine(
                    $"{item.Diretor.Nome,-30}" +
                    $"\t{item.Quantidade}" +
                    $"\t{item.Total}" +
                    $"\t{item.Min}" +
                    $"\t{item.Max}" +
                    $"\t{item.Media}");
            }

            int tamanhoPagina = 4;
            int pagina        = 0;

            while (pagina * tamanhoPagina < filmes.Count())
            {
                Console.WriteLine();
                Console.WriteLine("Página: " + (pagina + 1));
                Console.WriteLine();

                var relatorio =
                    from f in filmes
                    .Skip(pagina * tamanhoPagina)
                    .Take(tamanhoPagina)
                    select f;

                Imprimir(relatorio);

                pagina++;
            }

            Console.ReadKey();
        }