Пример #1
0
        /// <summary>
        /// Linq to entities min max e avg
        /// calcular o "preço da maior", "menor venda" e "venda média".
        /// </summary>
        private static void Aula12()
        {
            using (var contexto = new TunesEntities())
            {
                //para ver as consultas que estão sendo geradas
                contexto.Database.Log = Console.WriteLine;

                //faz 3 chamadas no banco
                var maiorVenda = contexto.NotaFiscals.Max(nf => nf.Total);
                var menorVenda = contexto.NotaFiscals.Min(nf => nf.Total);
                var mediaVenda = contexto.NotaFiscals.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 media venda é de R$ {0}", mediaVenda);

                //para trazer todas as consultas de uma vez
                //o single transforma a consulta em um objeto
                var vendas = (from nf in contexto.NotaFiscals
                              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 media venda é de R$ {0}", vendas.VendaMedia);
            }

            Console.ReadKey();
        }
Пример #2
0
        /// <summary>
        /// Linq to entities com count
        /// </summary>
        private static void Aula9()
        {
            using (var contexto = new TunesEntities())
            {
                var query = from f in contexto.Faixas
                            where f.Album.Artista.Nome == "Led Zeppelin"
                            select f;

                //quantas faixas existem em um album

                //var quantidade = query.Count();

                var quantidade = contexto.Faixas.Count(f => f.Album.Artista.Nome == "Led Zeppelin");

                Console.WriteLine(quantidade);

                //foreach (var item in query)
                //{
                //    Console.WriteLine("{0}\t", item.Nome);
                //}

                Console.WriteLine();

                Console.ReadKey();
            }
        }
Пример #3
0
        /// <summary>
        /// Linq to entities - Where com Lambda
        /// </summary>
        private static void Aula5()
        {
            using (var contexto = new TunesEntities())
            {
                string textoBusca = "Led";

                //sintaxe de consulta
                //usada para consultas mais complexas
                var query = from a in contexto.Artistas
                            where a.Nome.Contains(textoBusca)
                            select a;

                foreach (var item in query)
                {
                    Console.WriteLine("{0}\t{1}", item.ArtistaId, item.Nome);
                }

                //sintaxe de metodo
                //select esta implicito
                //usada mais para consultas simples
                var query2 = contexto.Artistas.Where(a => a.Nome.Contains(textoBusca));

                Console.WriteLine();

                foreach (var item in query2)
                {
                    Console.WriteLine("{0}\t{1}", item.ArtistaId, item.Nome);
                }

                Console.ReadKey();
            }
        }
Пример #4
0
        /// <summary>
        /// Select com join - Linq to entities
        /// </summary>
        private static void Aula4()
        {
            using (var contexto = new TunesEntities())
            {
                var query = from g in contexto.Generos
                            select g;

                //trouxe muitos dados
                var queryFaixaGenero = from g in contexto.Generos
                                       join f in contexto.Faixas
                                       on g.GeneroId equals f.GeneroId
                                       select new { g, f };

                //traz somente 10 elementos
                queryFaixaGenero = queryFaixaGenero.Take(10);

                //configuração para ver tudo que é gerado no link para o sql
                contexto.Database.Log = Console.WriteLine;


                foreach (var item in queryFaixaGenero)
                {
                    Console.WriteLine("{0}\t{1}", item.f.Nome, item.g.Nome);
                }

                Console.ReadKey();
            }
        }
Пример #5
0
        /// <summary>
        /// Linq to entities - Refinando Consultas com parametros
        /// </summary>
        private static void Aula7()
        {
            string textoBusca      = "Led Zeppelin";
            string textoBuscaAlbum = "Graffiti";

            using (var contexto = new TunesEntities())
            {
                GetFaixas(textoBusca, contexto, textoBuscaAlbum);

                Console.ReadKey();
            }
        }
Пример #6
0
        /// <summary>
        /// Linq to entites  - Join
        /// </summary>
        private static void Aula6()
        {
            using (var contexto = new TunesEntities())
            {
                string textoBusca = "Led";

                //usando consulta com join para casos em que não é possivel ler
                //as propriedades de navegação e onde não existe o relacionamento
                //pela chave que esta sendo comparada
                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);
                }

                Console.WriteLine();

                //consulta sem join usando navigation properties
                //consulta mais limpa, podemos usar sem o join encadeando as propriedades de navegação
                var query2 = from alb in contexto.Albums
                             where alb.Artista.Nome.Contains(textoBusca)
                             select new
                {
                    NomeArtista = alb.Artista.Nome,
                    NomeAlbum   = alb.Titulo
                };

                foreach (var item in query2)
                {
                    Console.WriteLine("{0}\t{1}", item.NomeArtista, item.NomeAlbum);
                }

                Console.ReadKey();
            }
        }
Пример #7
0
        /// <summary>
        /// Linq to entities com Sum
        /// </summary>
        private static void Aula10()
        {
            using (var contexto = new TunesEntities())
            {
                //calcular total de vendas por artista
                var query = from inf in contexto.ItemNotaFiscal
                            where inf.Faixa.Album.Artista.Nome.Contains("Led Zeppelin")
                            select new
                {
                    totalItem = inf.Quantidade * inf.PrecoUnitario
                };

                //preciso pegar o que retorna da query acima e somar
                var totalDoArtista = query.Sum(q => q.totalItem);

                Console.WriteLine(totalDoArtista);

                Console.ReadKey();
            }
        }
Пример #8
0
        /// <summary>
        /// Linq to entities groupby
        /// criar um relatório para listar os álbuns mais vendidos de um artista
        /// </summary>
        private static void Aula11()
        {
            using (var contexto = new TunesEntities())
            {
                var query = from inf in contexto.ItemNotaFiscal
                            where inf.Faixa.Album.Artista.Nome == "Led Zeppelin"
                            group inf by inf.Faixa.Album into agrupado
                            //aqui temos repetição da logica de soma então precisamos criar uma variavel
                            //variavel dentro de uma consulta linq - let(variavel interna dentro da consulta linq
                            orderby agrupado.Sum(a => a.Quantidade *a.PrecoUnitario) descending
                            select new
                {
                    TituloAlbum   = agrupado.Key.Titulo,
                    TotalPorAlbum = agrupado.Sum(q => q.Quantidade * q.PrecoUnitario)
                };

                //com let
                var query2 = from inf in contexto.ItemNotaFiscal
                             where inf.Faixa.Album.Artista.Nome == "Led Zeppelin"
                             group inf by inf.Faixa.Album into agrupado
                             //aqui temos repetição da logica de soma então precisamos criar uma variavel
                             //variavel dentro de uma consulta linq - let(variavel interna dentro da consulta linq
                             let vendaPorAlbum = agrupado.Sum(q => q.Quantidade * q.PrecoUnitario)
                                                 orderby vendaPorAlbum descending
                                                 select new
                {
                    TituloAlbum   = agrupado.Key.Titulo,
                    TotalPorAlbum = vendaPorAlbum
                };

                foreach (var item in query)
                {
                    Console.WriteLine("{0}\t{1}",
                                      item.TituloAlbum.PadRight(40),
                                      item.TotalPorAlbum
                                      );
                }

                Console.ReadKey();
            }
        }
Пример #9
0
        /// <summary>
        /// Linq métodos extensão
        /// cliente requisitou o cálculo da mediana das vendas.
        /// </summary>
        private static void Aula13()
        {
            using (var contexto = new TunesEntities())
            {
                var vendaMedia = contexto.NotaFiscals.Average(nf => nf.Total);

                Console.WriteLine("Venda Media {0}", vendaMedia);

                //para não usarmos dessa forma vamos criar um metodo de extensão
                var query =
                    from nf in contexto.NotaFiscals
                    select nf.Total;

                //usando o metodo de extensão criado
                var vendaMediana = contexto.NotaFiscals.Mediana(nf => nf.Total);

                Console.WriteLine("Mediana {0}", vendaMediana);

                Console.ReadKey();
            }
        }
Пример #10
0
        private static void GetFaixas(string textoBusca, TunesEntities contexto, string buscaAlbum)
        {
            var query = from f in contexto.Faixas
                        where f.Album.Artista.Nome.Contains(textoBusca) &&
                        (!string.IsNullOrEmpty(buscaAlbum) ?
                         f.Album.Titulo.Contains(buscaAlbum) : true)
                        orderby f.Album.Titulo, f.Nome
            select f;

            //if(!string.IsNullOrEmpty(buscaAlbum))
            //{
            //    query = query.Where(a => a.Album.Titulo.Contains(buscaAlbum));
            //}

            //aula 8 - thenby ordenação secundaria
            //query = query.OrderBy(q => q.Album.Titulo).ThenBy(q=> q.Nome);

            foreach (var item in query)
            {
                Console.WriteLine("{0}\t{1}", item.Album.Titulo.PadRight(40), item.Nome);
            }
        }