static void Main(string[] args) { int clienteId = 17; using (var contexto = new AluraTunesEntities()) { var vendasPorCliente = from v in contexto.ps_Itens_Por_Cliente(clienteId) group v by new { v.DataNotaFiscal.Year, v.DataNotaFiscal.Month } into agrupado orderby agrupado.Key.Year, agrupado.Key.Month select new { Ano = agrupado.Key.Year, Mes = agrupado.Key.Month, Total = agrupado.Sum(a => a.Total) }; foreach (var item in vendasPorCliente) { Console.WriteLine("{0}\t{1}\t{2}", item.Ano, item.Mes, item.Total); } } Console.ReadKey(); }
private static void ImprimirPagina(AluraTunesEntities contexto, int TAMANHO_PAGINA, int numeroPagina) { var query = from nf in contexto.NotaFiscais orderby nf.NotaFiscalId select new { Numero = nf.NotaFiscalId, Data = nf.DataNotaFiscal, Cliente = nf.Cliente.PrimeiroNome + " " + nf.Cliente.Sobrenome, Total = nf.Total }; int numeroDePulos = (numeroPagina - 1) * TAMANHO_PAGINA; query = query.Skip(numeroDePulos); query = query.Take(TAMANHO_PAGINA); Console.WriteLine(); Console.WriteLine("Número da Página: {0}", numeroPagina); foreach (var item in query) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", item.Numero, item.Data, item.Cliente.PadRight(20), item.Total); } }
protected AluraTunesEntities GetContextoComLog() { var contexto = new AluraTunesEntities(); contexto.Database.Log = Console.WriteLine; return(contexto); }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var querymedia = contexto.NotasFiscais.Average(n => n.Total); var query = from nf in contexto.NotasFiscais where nf.Total > querymedia //subconsulta orderby nf.Total descending select new { Numero = nf.NotaFiscalId, Data = nf.DataNotaFiscal, Cliente = nf.Cliente.PrimeiroNome + "" + nf.Cliente.Sobrenome, Valor = nf.Total }; foreach (var notafiscal in query) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", notafiscal.Numero, notafiscal.Data, notafiscal.Cliente, notafiscal.Valor); } Console.WriteLine("A média é {0}", querymedia); } Console.ReadKey(); }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var faixasQuery = from f in contexto.Faixas where f.ItemNotaFiscals.Count() > 0 let TotalVendas = f.ItemNotaFiscals.Sum(inf => inf.Quantidade * inf.PrecoUnitario) orderby TotalVendas descending select new { f.FaixaId, f.Nome, Total = TotalVendas }; var produtoMaisVendido = faixasQuery.First(); Console.WriteLine("{0}\t{1}\t{2}", produtoMaisVendido.FaixaId, produtoMaisVendido.Nome, produtoMaisVendido.Total); var query = from inf in contexto.ItemsNotaFiscal where inf.FaixaId == produtoMaisVendido.FaixaId select new { NomeCliente = inf.NotaFiscal.Cliente.PrimeiroNome + "-" + inf.NotaFiscal.Cliente.Sobrenome }; foreach (var cliente in query) { Console.WriteLine(cliente.NomeCliente); } Console.ReadKey(); } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var query = from g in contexto.Generos select g; foreach (var genero in query) { Console.WriteLine("{0}\t{1}", genero.GeneroId, genero.Nome); } var faixaEgenero = from g in contexto.Generos join f in contexto.Faixas on g.GeneroId equals f.GeneroId select new { f, g }; faixaEgenero = faixaEgenero.Take(10); contexto.Database.Log = Console.WriteLine; Console.WriteLine(); foreach (var item in faixaEgenero) { Console.WriteLine("{0}\t{1}", item.f.Nome, item.g.Nome); } } Console.ReadKey(); }
private static void ImprimirPagina(AluraTunesEntities contexto, int pagina) { var query = from nf in contexto.NotasFiscais orderby nf.NotaFiscalId select new { Numero = nf.NotaFiscalId, Data = nf.DataNotaFiscal, Cliente = nf.Cliente.PrimeiroNome + " " + nf.Cliente.Sobrenome, Total = nf.Total }; var tamanhoDoPulo = (pagina - 1) * TAMANHO_PAGINA; query = query.Skip(tamanhoDoPulo); query = query.Take(TAMANHO_PAGINA); Console.WriteLine(); Console.WriteLine("Página: {0}", pagina); Console.WriteLine(); foreach (var nf in query) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", nf.Numero, nf.Data, nf.Cliente, nf.Total); } }
public override void Solve(string[] args) { using (var contexto = new AluraTunesEntities())// GetContextoComLog()) { Console.BufferHeight = 1000; //var query = from art in contexto.Artistas // orderby art.Nome // select art; //foreach (var artista in query) //{ // Console.WriteLine(artista.Nome); //} //var query = from f in contexto.Faixas // where f.Album.Artista.Nome == "Iron Maiden" // orderby f.Nome, f.Album.Titulo // select f; //foreach (var faixa in query) //{ // Console.WriteLine("{0}{1}", faixa.Nome.PadRight(30), faixa.Album.Titulo); //} //var query = from alb in contexto.Albums // where alb.Artista.Nome == "Iron Maiden" // orderby alb.Titulo // select alb; //foreach (var album in query) //{ // Console.WriteLine(album.Titulo); //} //var query = from f in contexto.Faixas // where f.Album.Artista.Nome == "Iron Maiden" // //orderby f.Album.Titulo // select f; //foreach (var faixa in query) //{ // Console.WriteLine("{0}\t{1}", faixa.Album.Titulo, faixa.Nome); //}, var query = from nf in contexto.NotasFiscais orderby nf.Total descending, nf.Cliente.PrimeiroNome + " " + nf.Cliente.Sobrenome select new { nf.DataNotaFiscal, Cliente = nf.Cliente.PrimeiroNome + " " + nf.Cliente.Sobrenome, Total = nf.Total }; foreach (var nf in query) { Console.WriteLine("{0:dd/MM/yyyy}\t{1}\t{2}", nf.DataNotaFiscal, nf.Cliente, nf.Total); } } }
static void Main(string[] args) { var nomeDaMusica = "Smells Like Teen Spirit"; using (var contexto = new AluraTunesEntities()) { // Analise de Afinidade com auto relacionamento var faixaIds = contexto.Faixas.Where(f => f.Nome == nomeDaMusica) .Select(f => f.FaixaId); var query = from comprouIten in contexto.ItemsNotaFiscal join comprouTambem in contexto.ItemsNotaFiscal on comprouIten.NotaFiscal equals comprouTambem.NotaFiscal // self join where faixaIds.Contains(comprouIten.FaixaId) && comprouIten.FaixaId != comprouTambem.FaixaId select comprouTambem; foreach (var item in query) { Console.WriteLine("{0}\t{1}", item.NotaFiscalId, item.Faixa.Nome); } } Console.ReadKey(); }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var mesAniversario = 1; while (mesAniversario <= 12) { Console.WriteLine("Mês: {0}", mesAniversario); var lista = (from f in contexto.Funcionarios where f.DataNascimento.Value.Month == mesAniversario orderby f.DataNascimento.Value.Month, f.DataNascimento.Value.Day select f).ToList(); mesAniversario++; foreach (var f in lista) { Console.WriteLine("{0:dd/MM}\t{1} {2}", f.DataNascimento, f.PrimeiroNome, f.Sobrenome); } } Console.ReadKey(); } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { int faixaId = 1; Console.WriteLine("Quem comprou..."); Console.WriteLine(); var produtoProcurado = contexto.Faixas.Where(f => f.FaixaId == faixaId).Single(); Console.WriteLine("{0}", produtoProcurado.Nome); Console.WriteLine(); Console.WriteLine("...também comprou..."); Console.WriteLine(); var query = from esteItem in contexto.ItemsNotaFiscal join outroItem in contexto.ItemsNotaFiscal on esteItem.NotaFiscalId equals outroItem.NotaFiscalId where esteItem.ItemNotaFiscalId != outroItem.ItemNotaFiscalId && esteItem.FaixaId == faixaId select new { esteItem, outroItem }; Console.WriteLine("NF\tFaixa"); foreach (var item in query) { Console.WriteLine("{0}\t{1}", item.outroItem.NotaFiscalId, item.outroItem.Faixa.Nome); } } Console.ReadKey(); }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var query = from f in contexto.Faixas where f.Album.Artista.Nome == "Led Zeppelin" select f; var quantidade = contexto.Faixas .Count(f => f.Album.Artista.Nome == "Led Zeppelin"); Console.WriteLine("Led Zeppelin tem {0} faixas de música.", quantidade); Console.WriteLine(); var query2 = from inf in contexto.ItensNotaFiscal where inf.Faixa.Album.Artista.Nome == "Led Zeppelin" select new { totalDoItem = inf.Quantidade * inf.PrecoUnitario }; var totalDoArtista = query2.Sum(q => q.totalDoItem); Console.WriteLine("Total do artista: R$ {0}", totalDoArtista); Console.WriteLine(); var query3 = from inf in contexto.ItensNotaFiscal where inf.Faixa.Album.Artista.Nome == "Led Zeppelin" group inf by inf.Faixa.Album into agrupado let vendasPorAlbum = agrupado.Sum(a => a.Quantidade * a.PrecoUnitario) orderby vendasPorAlbum descending select new { TituloDoAlbum = agrupado.Key.Titulo, TotalPorAlbum = vendasPorAlbum }; foreach (var agrupado in query3) { Console.WriteLine("{0}\t{1}", agrupado.TituloDoAlbum.PadRight(40), agrupado.TotalPorAlbum); } Console.WriteLine(); contexto.Database.Log = Console.WriteLine; } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var query = from g in contexto.Generos select g; foreach (var genero in query) { Console.WriteLine("{0}\t{1}", genero.GeneroId, genero.Nome); } var faixaEgenero = from g in contexto.Generos join f in contexto.Faixas on g.GeneroId equals f.GeneroId select new { f, g }; faixaEgenero = faixaEgenero.Take(10); contexto.Database.Log = Console.WriteLine; Console.WriteLine(); foreach (var item in faixaEgenero) { Console.WriteLine("{0}\t{1}", item.f.Nome, item.g.Nome); } Console.WriteLine(); var textoBusca = "Led"; var query2 = from a in contexto.Artistas where a.Nome.Contains(textoBusca) select a; foreach (var artista in query2) { Console.WriteLine("{0}\t{1}", artista.ArtistaId, artista.Nome); } var query3 = contexto.Artistas.Where(a => a.Nome.Contains(textoBusca)); Console.WriteLine(); foreach (var artista in query3) { Console.WriteLine("{0}\t{1}", artista.ArtistaId, artista.Nome); } } Console.ReadKey(); }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var vendaMediana = Mediana(contexto.NotasFiscais.Select(ag => ag.Total)); Console.WriteLine("Venda Mediana: R$ {0}", vendaMediana); vendaMediana = contexto.NotasFiscais.Mediana(ag => ag.Total); Console.WriteLine("Venda Mediana: R$ {0}", vendaMediana); } Console.ReadKey(); }
private static void GetFaixas(AluraTunesEntities contexto, string buscaArtista, string buscaAlbum) { var query = from f in contexto.Faixas where f.Album.Artista.Nome.Contains(buscaArtista) && (!string.IsNullOrEmpty(buscaAlbum) ? f.Album.Titulo.Contains(buscaAlbum) : true) orderby f.Album.Titulo, f.Nome select f; foreach (var faixa in query) { Console.WriteLine("{0}\t{1}", faixa.Album.Titulo.PadRight(40), faixa.Nome); } }
static void Main(string[] args) { var barcodWriter = new BarcodeWriter(); barcodWriter.Format = BarcodeFormat.QR_CODE; barcodWriter.Options = new ZXing.Common.EncodingOptions { Width = 100, Height = 100 }; if (!Directory.Exists(Imagens)) { Directory.CreateDirectory(Imagens); } using (var contexto = new AluraTunesEntities()) { var queryFaixas = from f in contexto.Faixas select f; var listaFaixas = queryFaixas.ToList(); Stopwatch stopwatch = Stopwatch.StartNew(); var queryCodigos = listaFaixas .AsParallel() .Select(f => new { Arquivo = string.Format("{0}\\{1}.jpg", Imagens, f.FaixaId), Imagem = barcodWriter.Write(string.Format("aluratunes.com/faixa/{0}", f.FaixaId)) }); int contagem = queryCodigos.Count(); stopwatch.Stop(); Console.WriteLine("Códigos gerados: {0} em {1} segundos.", contagem, stopwatch.ElapsedMilliseconds / 1000.0); //2.8s //1.563 segundos foreach (var item in queryCodigos) { item.Imagem.Save(item.Arquivo, ImageFormat.Jpeg); } } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { GetFaixas(contexto, "Led Zeppelin", ""); Console.WriteLine(); GetFaixas(contexto, "Led Zeppelin", "Graffiti"); Console.WriteLine(); Console.ReadKey(); } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var linhasRelatorio = contexto.NotasFiscais.Count(); var paginasRelatorio = Math.Ceiling((double)linhasRelatorio / TAMANHO_PAGINA); for (var p = 1; p <= paginasRelatorio; p++) { ImprimirPagina(contexto, p); } Console.ReadKey(); } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var numeroNotasFiscais = contexto.NotasFiscais.Count(); var numeroPaginas = Math.Ceiling((decimal)numeroNotasFiscais / TAMANHO_PAGINA); for (var pagina = 1; pagina <= numeroPaginas; pagina++) { ImprimirPagina(TAMANHO_PAGINA, contexto, pagina); } Console.ReadKey(); } }
public override void Solve(string[] args) { using (var contexto = new AluraTunesEntities()) { int linhasRelatorio = contexto.NotasFiscais.Count(); double numeroDePaginas = Math.Ceiling((double)linhasRelatorio / TAMANHO_PAGINA); for (int p = 1; p <= numeroDePaginas; p++) { ImprimirPagina(contexto, p); } Console.ReadKey(); } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var textoBusca = "Led"; var query = from a in contexto.Artistas join alb in contexto.Albums on a.ArtistaId equals alb.ArtistaId where a.Nome.Contains(textoBusca) select new { NomeArtista = a.Nome, NomeAlbum = alb.Titulo }; foreach (var item in query) { Console.WriteLine("{0}\t{1}", item.NomeArtista, item.NomeAlbum); } var query2 = from alb in contexto.Albums where alb.Artista.Nome.Contains(textoBusca) select new { NomeArtista = alb.Artista.Nome, NomeAlbum = alb.Titulo }; Console.WriteLine(); foreach (var album in query2) { Console.WriteLine("{0}\t{1}", album.NomeArtista, album.NomeAlbum); } GetFaixas(contexto, "Led Zeppelin", ""); Console.WriteLine(); GetFaixas(contexto, "Led Zeppelin", "Graffiti"); Console.ReadKey(); } }
private static void GetFaixas(AluraTunesEntities contexto, string buscarArtista, string buscaAlbum) { var queryLinqtoentitiesrefinandoconsultas = from f in contexto.Faixas where f.Album.Artista.Nome.Contains(buscarArtista) && (!string.IsNullOrEmpty(buscaAlbum) ? f.Album.Artista.Nome.Contains(buscaAlbum) : true) orderby f.Album.Titulo, f.Nome select f; //if (!string.IsNullOrEmpty(buscaAlbum)) //{ // queryLinqtoentitiesrefinandoconsultas = queryLinqtoentitiesrefinandoconsultas.Where(q => q.Album.Artista.Nome.Contains(buscaAlbum)); //} //queryLinqtoentitiesrefinandoconsultas = queryLinqtoentitiesrefinandoconsultas.OrderBy(q => q.Album.Titulo).ThenBy(q => q.Nome); foreach (var faixa in queryLinqtoentitiesrefinandoconsultas) { Console.WriteLine("{0}\t{1}", faixa.Album.Titulo.PadRight(40), faixa.Nome); } Console.WriteLine(); //1 - Linq to entities count Console.WriteLine("1 - Linq to entities count"); var queryLinqtoentitiescount = from c in contexto.Faixas where c.Album.Artista.Nome == "Led Zeppelin" select c; // var quantidade = queryLinqtoentitiescount.Count(); var quantidade = contexto.Faixas .Count(c => c.Album.Artista.Nome == "Led Zeppelin"); Console.WriteLine($"Led Zeppelin tem {quantidade} musicas na databse"); Console.WriteLine(); Console.WriteLine("Notas Fiscais"); var queryItensNotaFiscal = from inf in contexto.ItemNotaFiscals where inf.Faixa.Album.Artista.Nome == "Led Zeppelin" select new { totaldoItem = inf.Quantidade * inf.PrecoUnitario }; var totoalDoArtista = queryItensNotaFiscal.Sum(inf => inf.totaldoItem); Console.WriteLine($"Total do artista em R$ {totoalDoArtista}"); }
public override void Solve(string[] args) { using (var contexto = new AluraTunesEntities())// GetContextoComLog()) { Console.BufferHeight = 1000; var query = from f in contexto.Faixas where f.Album.Artista.Nome == "Metallica" select f; //Agora queremos mudar a consulta para filtrar pelos álbuns que contenham "Graffiti" query = query.Where(f => f.Album.Titulo.Contains("Black Album")); foreach (var f in query) { Console.WriteLine("{0}\t{1}", f.Album.Titulo, f.Nome); } } }
public override void Solve(string[] args) { using (var contexto = new AluraTunesEntities()) { //A sintaxe de método para essa query é um pouco mais compacta que a versão anterior: var query = contexto.Artistas.Where(a => a.Nome.Contains("Led")); foreach (var artista in query) { Console.WriteLine("{0}\t{1}", artista.ArtistaId, artista.Nome); } //P: Como sei quando usar a sintaxe de consulta ou sintaxe de método? //R: Ambos vão realizar a mesma tarefa. Em geral, a sintaxe de método é mais //apropriada para consultas pequenas, como no exemplo acima. Já em consultas complexas, //envolvendo múltiplas fontes de dados, a sintaxe de consulta é mais legível e deve ser //considerada. } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var maiorVenda = contexto.NotasFiscais.Max(nf => nf.Total); var menorVenda = contexto.NotasFiscais.Min(nf => nf.Total); var vendaMedia = contexto.NotasFiscais.Average(nf => nf.Total); Console.WriteLine("A maior venda é de R$ {0}", maiorVenda); Console.WriteLine("A menor venda é de R$ {0}", menorVenda); Console.WriteLine("A venda média é de R$ {0}", vendaMedia); var vendas = (from nf in contexto.NotasFiscais group nf by 1 into agrupado select new { maiorVenda = agrupado.Max(nf => nf.Total), menorVenda = agrupado.Min(nf => nf.Total), vendaMedia = agrupado.Average(nf => nf.Total) }).Single(); Console.WriteLine("A maior venda é de R$ {0}", vendas.maiorVenda); Console.WriteLine("A menor venda é de R$ {0}", vendas.menorVenda); Console.WriteLine("A venda média é de R$ {0}", vendas.vendaMedia); var vendaMediana = Mediana(contexto.NotasFiscais.Select(ag => ag.Total)); Console.WriteLine("Venda Mediana: R$ {0}", vendaMediana); vendaMediana = contexto.NotasFiscais.Mediana(ag => ag.Total); Console.WriteLine("Venda Mediana: R$ {0}", vendaMediana); } Console.ReadKey(); }
static void Main(string[] args) { // pacotes gerar QrCode //Install-Package ZXing.Net // Adcionar nas referencias system.Drawing var barcodWriter = new BarcodeWriter(); barcodWriter.Format = BarcodeFormat.QR_CODE; barcodWriter.Options = new ZXing.Common.EncodingOptions { Width = 100, Height = 100 }; if (!Directory.Exists(Imagens)) { Directory.CreateDirectory(Imagens); } using (var contexto = new AluraTunesEntities()) { var queryfaixas = from f in contexto.Faixas select f; var listaFaixas = queryfaixas.ToList(); //Cronometro Stopwatch stopwatch = Stopwatch.StartNew(); var queryCodigos = listaFaixas .AsParallel() //usar todos os nucleos do pc .Select(f => new { Arquivo = string.Format("{0}\\{1}.jpg", Imagens, f.FaixaId), Imagem = barcodWriter.Write(string.Format("aluratunes.com/faixa/{0}", f.FaixaId)) }); int contagem = queryCodigos.Count(); stopwatch.Stop(); Console.WriteLine("Codigos Gerados: {0} em {1} segundos.", contagem, stopwatch.ElapsedMilliseconds / 1000.0); stopwatch = Stopwatch.StartNew(); //foreach (var item in queryCodigos) //{ // item.Imagem.Save(item.Arquivo, ImageFormat.Jpeg); //} queryCodigos.ForAll(item => item.Imagem.Save(item.Arquivo, ImageFormat.Jpeg)); // distribui em varias trades stopwatch.Stop(); Console.WriteLine("Codigos Salvos em arquivos: {0} em {1} segundos.", contagem, stopwatch.ElapsedMilliseconds / 1000.0); } Console.ReadKey(); }
static void Main(string[] args) { #region Introdução ao link utlizando banco using (var contexto = new AluraTunesEntities()) { //definição consulta var query = from g in contexto.Generos select g; foreach (var sla in query) { Console.WriteLine(sla.GeneroId.ToString() + " " + sla.Nome); } //acessando dados e imprimindÕ Console.WriteLine( ); var faixaegenero = from g in contexto.Generos join f in contexto.Faixas on g.GeneroId equals f.GeneroId select new { g, f }; faixaegenero = faixaegenero.Take(10); contexto.Database.Log = Console.WriteLine; foreach (var elemento in faixaegenero) { Console.WriteLine(elemento.f.Nome + " " + elemento.g.Nome); } Console.ReadKey(); } #endregion #region aula 05 Linq com where using (var contexto = new AluraTunesEntities()) { var txtBusca = "Led"; var artistas = from b in contexto.Artistas where b.Nome.Contains(txtBusca) select b; foreach (var artista in artistas) { Console.WriteLine(artista.ArtistaId + " " + artista.Nome); } } #endregion #region aula 6 mesma coisa que a aula 5 porém usando Lambda expression(sintaxe de metodo para consulta) using (var contexto = new AluraTunesEntities()) { var artistas = contexto.Artistas.Where(a => a.Nome.Contains("Led")); foreach (var artista in artistas) { Console.WriteLine(artista.ArtistaId + " " + artista.Nome); } } #endregion #region aula 7 consulta com join using (var contexto = new AluraTunesEntities()) { var query = from art in contexto.Artistas join alb in contexto.Albums on art.ArtistaId equals alb.ArtistaId where art.Nome.Contains("Led") select new { art, alb }; foreach (var artista in query) { Console.WriteLine(artista.art.ArtistaId + " " + artista.art.Nome + " " + artista.alb.Titulo); } } #endregion #region Aula 8 consulta sem join using (var contexto = new AluraTunesEntities()) { var query = from alb in contexto.Albums where alb.Artista.Nome.Contains("Led") select new { NomeArtista = alb.Artista.Nome, NomeAlbum = alb.Titulo }; foreach (var artista in query) { Console.WriteLine(artista.NomeArtista + " " + artista.NomeAlbum); } } #endregion #region Aula 10 consulta com orderby using (var contexto = new AluraTunesEntities()) { var query = from art in contexto.Artistas select art; query = query.OrderBy(q => q.Nome).ThenBy(p => p.ArtistaId); foreach (var artista in query) { Console.WriteLine(artista.ArtistaId + " " + artista.Nome); } } #endregion #region Aula 11 Count using (var contexto = new AluraTunesEntities()) { var query = from f in contexto.Faixas where f.Album.Artista.Nome == "Led Zeppelin" select f; var quantidade = query.Count(); var metodo = contexto.Faixas.Where(p => p.Album.Artista.Nome == "Led Zeppelin").Count(); Console.WriteLine($"Led Zeppelin tem {quantidade} músicas no banco de dados."); Console.WriteLine(); Console.WriteLine($"Led Zeppelin tem {metodo} músicas no banco de dados."); } #endregion #region Aula 12 Sum using (var contexto = new AluraTunesEntities()) { var query = from art in context } #endregion Console.ReadKey(); }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { // Definição de uma consulta var query = from g in contexto.Generos select g; // imprimir no console ImprimirGenero(query); var faixaEGeneros = from g in contexto.Generos join f in contexto.Faixas on g.GeneroId equals f.GeneroId select new { f, g }; Console.WriteLine(); faixaEGeneros = faixaEGeneros.Take(10); Console.WriteLine(); //contexto.Database.Log = Console.WriteLine; // Depurar Sql foreach (var faixaEGenero in faixaEGeneros) { Console.WriteLine("{0}\t{1}", faixaEGenero.f.Nome, faixaEGenero.g.Nome); } Console.WriteLine(); //1 - Linq to entities join Console.WriteLine("Linq to entities join"); var textoBusca = "Led"; var queryBuscar = from a in contexto.Artistas join alb in contexto.Albums on a.ArtistaId equals alb.ArtistaId where a.Nome.Contains(textoBusca) select new { NomeArtista = a.Nome, NomeAlbum = alb.Titulo }; foreach (var item in queryBuscar) { Console.WriteLine("{0}\t{1}", item.NomeArtista, item.NomeAlbum); } Console.WriteLine(); //2 - Linq to entities sem join Console.WriteLine("2 - Linq to entities sem join"); var queryLinqtoentitiessemjoin = from alb in contexto.Albums where alb.Artista.Nome.Contains(textoBusca) select new { NomeArtista = alb.Artista.Nome, NomeAlbum = alb.Titulo }; foreach (var item in queryLinqtoentitiessemjoin) { Console.WriteLine("{0}\t{1}", item.NomeArtista, item.NomeAlbum); } Console.WriteLine(); //3 - Linq to entities refinando consultas Console.WriteLine("3 - Linq to entities refinando consultas"); var buscarArtista = "Led Zeppelin"; var buscaAlbum = "Graffiti"; GetFaixas(contexto, buscarArtista, buscarArtista); Console.WriteLine(); Console.WriteLine("GroupBy"); var queryGroupBy = from inf in contexto.ItemNotaFiscals where inf.Faixa.Album.Artista.Nome == "Led Zeppelin" group inf by inf.Faixa.Album into agrupado let vendasPorAlbum = agrupado.Sum(a => a.Quantidade * a.PrecoUnitario) orderby vendasPorAlbum descending select new { TituloDoAlbum = agrupado.Key.Titulo, TotalPorAlbum = vendasPorAlbum }; foreach (var agrupado in queryGroupBy) { Console.WriteLine( "{0}\t{1}", agrupado.TituloDoAlbum.PadRight(40), agrupado.TotalPorAlbum ); } Console.WriteLine(); Console.WriteLine("Max"); var contextoMax = new AluraTunesEntities(); var maiorVenda = contextoMax.NotaFiscals.Max(nf => nf.Total); var menorVenda = contextoMax.NotaFiscals.Max(nf => nf.Total); var vendaMedia = contextoMax.NotaFiscals.Average(nf => nf.Total); Console.WriteLine("A menor venda é de R$ {0}", menorVenda); Console.WriteLine("A venda média é de R$ {0}", vendaMedia); Console.WriteLine("A maior venda é de R$ {0}", maiorVenda); Console.WriteLine("Mediana:"); var mediana = from nf in contextoMax.NotaFiscals select nf.Total; var contagem = mediana.Count(); var queryordenada = mediana.OrderBy(Total => Total); var elementoCentral = queryordenada.Skip(contagem / 2).First(); var medianaa = elementoCentral; Console.WriteLine("Mediana:{0}", medianaa); Console.ReadKey(); } }
static void Main(string[] args) { using (var contexto = new AluraTunesEntities()) { var query = from f in contexto.Faixas where f.Album.Artista.Nome == "Led Zeppelin" select f; var quantidade = contexto.Faixas .Count(f => f.Album.Artista.Nome == "Led Zeppelin"); Console.WriteLine("Led Zeppelin tem {0} faixas de música.", quantidade); Console.WriteLine(); var query2 = from inf in contexto.ItemsNotaFiscal where inf.Faixa.Album.Artista.Nome == "Led Zeppelin" select new { totalDoItem = inf.Quantidade * inf.PrecoUnitario }; var totalDoArtista = query2.Sum(q => q.totalDoItem); Console.WriteLine("Total do artista: R$ {0}", totalDoArtista); Console.WriteLine(); var query3 = from inf in contexto.ItemsNotaFiscal where inf.Faixa.Album.Artista.Nome == "Led Zeppelin" group inf by inf.Faixa.Album into agrupado let vendasPorAlbum = agrupado.Sum(a => a.Quantidade * a.PrecoUnitario) orderby vendasPorAlbum descending select new { TituloDoAlbum = agrupado.Key.Titulo, TotalPorAlbum = vendasPorAlbum }; foreach (var agrupado in query3) { Console.WriteLine("{0}\t{1}", agrupado.TituloDoAlbum.PadRight(40), agrupado.TotalPorAlbum); } Console.WriteLine(); contexto.Database.Log = Console.WriteLine; var maiorVenda = contexto.NotasFiscais.Max(nf => nf.Total); var menorVenda = contexto.NotasFiscais.Min(nf => nf.Total); var vendaMedia = contexto.NotasFiscais.Average(nf => nf.Total); Console.WriteLine("A maior venda é de R$ {0}", maiorVenda); Console.WriteLine("A menor venda é de R$ {0}", menorVenda); Console.WriteLine("A venda média é de R$ {0}", vendaMedia); var vendas = (from nf in contexto.NotasFiscais group nf by 1 into agrupado select new { maiorVenda = agrupado.Max(nf => nf.Total), menorVenda = agrupado.Min(nf => nf.Total), vendaMedia = agrupado.Average(nf => nf.Total) }).Single(); Console.WriteLine("A maior venda é de R$ {0} Total", vendas.maiorVenda); Console.WriteLine("A menor venda é de R$ {0} Total", vendas.menorVenda); Console.WriteLine("A venda média é de R$ {0} Total", vendas.vendaMedia); Console.ReadKey(); } }
public override void Solve(string[] args) { //Já vimos Linq to Objects e Linq to XML. Vamos ver como acessar dados do Sql Server através //do Entity Framework. //Agora vamos criar um banco de dados SQL Server vazio e colocá-lo dentro da nossa aplicação. //No mundo real é aconselhável manter esse banco de dados num servidor SQL Server separado e dedicado, mas //para as nossas aulas vamos colocar o banco dentro do projeto. //Com esse banco SQL criado, vamos rodar agora um script que vai criar todo o modelo (tabelas, colunas, //chaves primárias, chaves estrangeiras, etc). Criamos uma nova query e copiamos o script. Agora rodamos //esse script no banco de dados: (BATER PALMA E PEDIR PRA ACELERAR) //Agora que o script rodou com sucesso, podemos ver que os objetos foram criados como esperado //MOSTRAR TABELAS E COLUNAS QUE FORAM CRIADAS //Apenas para conferir as informações, vamos ver quais os gêneros o nosso banco de dados contém //FAZER UMA QUERY E BUSCAR DADOS DE GENEROS //Veja como o script populou os dados de gêneros musicais... //FAZER UMA QUERY E BUSCAR DADOS DE FAIXAS DE MÚSICAS //Veja como o script populou os dados de faixas de músicas... //Agora que o nosso banco de dados está pronto pra ser usado, vamos criar o nosso modelo de entidades //com o Entity Framework. // - Add > New Item > Data > EF 6.x DbContext Generator //PEDIR PRA ACELERAR //COMEÇAR UMA CLASSE VAZIA //É verdade que o Linq é muito poderoso, pelo que já vimos isso em Linq to Objects (Linq para Objetos) e o Linq to XML (Linq para XML). //Mas e quanto ao Entity Framework? Linq to Entities (ou Linq para Entidades) formam o casal perfeito. Não é possível utilizar //todo o potencial do Entity Framework sem conhecer o Linq to Entities. //Nosso cliente pediu para criarmos uma listagem com as faixas de música e os respectivos gêneros, como já //fizemos anteriormente com Linq to Objects e Linq to XML, mas dessa vez teremos que acessar o banco de dados através do EF. //Mas como utilizamos o Linq to Entities? Primeiro, precisamos instanciar o CONTEXTO do Entity Framework, como já sabemos: using (var contexto = new AluraTunesEntities()) { //aqui vai a definição da query //aqui vai o código para exibir os dados } //Agora a ideia é encaixamos nosso código dentro do bloco using desse contexto, da seguinte forma: using (var contexto = new AluraTunesEntities()) { //Cada entidade do Entity Framework é um objeto da classe DBSet<T>, que por sua vez implementa //a interface IEnumerable. Toda classe IEnumerable pode ser usada como fonte de dados do Linq. //Vamos começar nossa consulta de forma bem simples, listando apenas os gêneros. var generoQuery = from g in contexto.Generos select g; Console.WriteLine(); foreach (var genero in generoQuery) { Console.WriteLine("{0}\t{1}", genero.GeneroId, genero.Nome); } //Perceba que até agora tínhamos visto como usar o Linq para acessar objetos em memória //e dados de arquivos XML. Mas agora o resultado que estamos vendo é o retrato da tabela //Generos do banco de dados, só que acessada através da entidade Generos do Entity Framework. Mas //e se quisermos trazer também as faixas de música na nossa consulta? var query = from f in contexto.Faixas join g in contexto.Generos on f.GeneroId equals g.GeneroId select new { FaixaId = f.FaixaId, Nome = f.Nome, Genero = g.Nome }; //Agora obtemos os valores da nossa query: foreach (var faixaEgenero in query) { Console.WriteLine("{0}\t{1}\t{2}", faixaEgenero.FaixaId, faixaEgenero.Nome, faixaEgenero.Genero); } Console.WriteLine(); //PALMAS - ACELERAR ESSA PARTE POR FAVOR //P: Essa consulta retornou um número enorme de linhas na tela. Eu só precisava de 10 linhas. O que faço? //R: Nesse caso precisamos utilizar o método Take, que irá exibir somente os 10 primeiros elementos da consulta: query = query.Take(10); foreach (var faixaGenero in query) { Console.WriteLine("{0}\t{1}\t{2}", faixaGenero.FaixaId, faixaGenero.Nome, faixaGenero.Genero); } //P: Agora mostrou somente os 10 primeiros elementos, mas não é ineficiente o método Take trazer // do banco de dados milhares de linhas e filtrar em memória? //R: Mas não foi isso que aconteceu. O método Take não executou a consulta. Ele não acessou dados. Ele apenas a redefiniu. // O que acontece é que criar uma definição de consulta é diferente de executar essa consulta. No final // das contas, o Linq gera uma consulta SQL Server que diz ao banco de dados para trazer somente 10 elementos. //P: Mas o que estamos fazendo já não é um script de query SQL? Pensei que era pra isso que existia // consulta em Linq to Entities. //R: Não. O que estamos fazendo é uma query em Linq, usando código C#, e não uma consulta SQL. // Essa query Linq é TRADUZIDA internamente para uma consulta SQL Server, e enviada para o banco de // dados. //É meio frustrante não saber exatamente o que está sendo enviado para o banco de dados. Nâo seria bom //se pudéssemos VER a consulta Sql Server que está sendo emitida? //Felizmente, existe uma maneira simples de fazer isso. Basta adicionar a sequinte linha após //a declaração da variável contexto. Mostrará não só a consulta SQL gerada, como também //logs de erros e alertas do banco de dados: contexto.Database.Log = Console.WriteLine; //Agora varremos novamente nossa consulta e vemos o script SQL que é gerado no console foreach (var faixaGenero in query) { Console.WriteLine("{0}\t{1}\t{2}", faixaGenero.FaixaId, faixaGenero.Nome, faixaGenero.Genero); } //Então é isso.Nesse vídeo aprendemos a criar uma consulta simples //trazendo apenas os gêneros e uma consulta um pouco mais complexa //combinando dados de faixas de músicas e gêneros musicais, e a limitar //o número de linhas do resultado. //Aprendemos que todo objeto que implementa interface IEnumerable pode ser usado //como fonte de dados numa consulta Linq.Também aprendemos a diferenciar uma definição //de consulta da execução da consulta //No final, aprendemos também a visualizar a consulta SQL gerada a partir da consulta Linq. //A seguir, vamos aprender como consultar um artista pelo nome. //Espero que vocês tenham gostado do vídeo! Obrigado e até à próxima! } }