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(); }
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(); }