none
QUERY LINQ C# SQL COM ERRO RRS feed

  • Pergunta

  • TENHO ESSA QUERY SQL USANDO  O LINQ DO C# POREM ESTA DANDO ERRO

    ALGUEM PODE ME AJUDAR ?


    if (tbDATAINICIAL.Text != "" && tbDATAFINAL.Text != "" && DropDownListModulo.Text == "CONTATOS")
                        {
                            sourceClientes = from cli in mdc.CLIENTES
                                              join CT in mdc.CONTATOS on cli.CODIGO equals CT.CLIENTE
                                              where
    
                                                (cli.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                &&
                                                cli.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                 )
                                                ||
                                                (cli.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                    && cli.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                              //group
                                              &&
                                              CT.USUARIO != ""
                                              group CT by new
                                              {
                                                  CT.USUARIO
                                              }
                                                  into g
                                                  orderby g.Sum(p => p.CONT) descending
                                                  select new
                                                  {
                                                      g.Key.USUARIO,
                                                      TOTAL = g.Sum(p => p.CONT)
                                                  };
    
    
                        }

    ERRO:

    Error 40  Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<ControledeUsuarios.CLIENTES>'. An explicit conversion exists (are you missing a cast?) C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 147 47  ControledeUsuarios


    • Editado Marcos SJ quarta-feira, 17 de fevereiro de 2016 17:32 Edição/Organização de informações
    quarta-feira, 17 de fevereiro de 2016 14:05

Todas as Respostas

  • Como usar o linq com o group by ?

    SELECT CON.USUARIO,SUM(CON.CONT) AS TOTAL FROM CONTATOS AS CON
    INNER JOIN CLIENTES AS CLI
    ON CLI.CODIGO = CON.CLIENTE
    WHERE CON.USUARIO <> ''
    GROUP BY CON.USUARIO
    ORDER BY TOTAL DESC

    • Mesclado Marcos SJ quarta-feira, 17 de fevereiro de 2016 19:41 Thread duplicada
    sexta-feira, 12 de fevereiro de 2016 19:31
  • Ficaria desta forma:

    from CON in CONTATOS
    join CLI in CLIENTES on CON.CLIENTE equals CLI.CODIGO
    where
      CON.USUARIO != ""
    group CON by new {
      CON.USUARIO
    } into g
    orderby g.Sum(p => p.CONT) descending
    select new {
      g.Key.USUARIO,
      TOTAL = g.Sum(p => p.CONT)
    }

    • Marcado como Resposta Marcos SJ segunda-feira, 15 de fevereiro de 2016 11:19
    • Não Marcado como Resposta Ricardo-ti2016 segunda-feira, 15 de fevereiro de 2016 16:26
    • Sugerido como Resposta Ricardo dos Sntos terça-feira, 16 de fevereiro de 2016 00:24
    sábado, 13 de fevereiro de 2016 02:33
  • Boa Tarde Cesar

    Coloquei dessa  forma e esta dando erro:

                                              

    if (tbDATAINICIAL.Text != "" && tbDATAFINAL.Text != "" && DropDownListModulo.Text == "CONTATOS")
                        {
                            sourceClientes = from cli in mdc.CLIENTES
                                              join CT in mdc.CONTATOS on cli.CODIGO equals CT.CLIENTE
                                              where

                                                (cli.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                &&
                                                cli.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                 )
                                                ||
                                                (cli.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                    && cli.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                              //group
                                              &&
                                              CT.USUARIO != ""
                                              group CT by new
                                              {
                                                  CT.USUARIO
                                              }
                                                  into g
                                                  orderby g.Sum(p => p.CONT) descending
                                                  select new
                                                  {
                                                      g.Key.USUARIO,
                                                      TOTAL = g.Sum(p => p.CONT)
                                                  };


                        }

    ERRO:

    Error 40 Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<ControledeUsuarios.CLIENTES>'. An explicit conversion exists (are you missing a cast?) C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 147 47 ControledeUsuarios

    segunda-feira, 15 de fevereiro de 2016 16:27
  • sourceClientes = (from cli in mdc.CLIENTES
                                              where
                                                (cli.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                && 
                                                cli.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                 )
                                                ||   
                                                (cli.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                    && cli.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                                //group
                                                &&
                                                cli.USUARIO != ""
                                                group cli by new
                                                {
                                                    cli.USUARIO
                                                }
                                                into g
                                                orderby g.Sum(p => p.CONT) descending
                                                select new
                                                {
                                                    g.Key.USUARIO,
                                                    TOTAL = g.Sum(p => p.CONT)
                                                });

    ERRO:

    Error 40  Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<ControledeUsuarios.CLIENTES>'. An explicit conversion exists (are you missing a cast?) C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 147 47  ControledeUsuarios

    • Mesclado Marcos SJ quarta-feira, 17 de fevereiro de 2016 17:36 Thread duplicada
    segunda-feira, 15 de fevereiro de 2016 17:57
  • O problema ocorre porque você está retornando um tipo anonimo e provavelmente na sua função recebe uma lista de Clientes.

    Você vai ter que converter o retorno no linq em uma lista do tipo Clientes

    • Sugerido como Resposta Ricardo dos Sntos terça-feira, 16 de fevereiro de 2016 00:14
    • Marcado como Resposta Marcos SJ quarta-feira, 17 de fevereiro de 2016 13:21
    • Não Marcado como Resposta Ricardo-ti2016 quarta-feira, 17 de fevereiro de 2016 14:03
    segunda-feira, 15 de fevereiro de 2016 18:12
  • Ok Cesar

    Eu entendi. Porem como eu faço isso usando o linq na minha query ?

    No SQL Server funciona perfeitamente.

    Mas no linq eu apanho mesmo.....

    Pode me ajudar ?

    Fico no aguardo.

    Obrigado

    segunda-feira, 15 de fevereiro de 2016 18:59
  • Se vc vai ordenar somente por um campo é assim veja exemplo

    var query =  from bs in db.MYDATABASE
                 where bs.COMPANY == "MY COMPANY"
                 group bs by bs.PRODCODE into g
                 orderby g.Sum(x => x.MQTY)
                 select new BestSeller
                 {
                     product_code = g.Key,
                     product_description = g.First().DESCRIPTION,
                     total_quantity = g.Sum(x => x.MQTY) 
                 };



    Junior

    • Marcado como Resposta Marcos SJ quarta-feira, 17 de fevereiro de 2016 13:22
    • Não Marcado como Resposta Ricardo-ti2016 quarta-feira, 17 de fevereiro de 2016 14:01
    segunda-feira, 15 de fevereiro de 2016 19:19
  • Exatamente como o Junior sugeriu ou também.

    sourceClientes = (from cli in mdc.CLIENTES
                                              where
                                                (cli.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                && 
                                                cli.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                 )
                                                ||   
                                                (cli.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                    && cli.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                                //group
                                                &&
                                                cli.USUARIO != ""
                                                group cli by new
                                                {
                                                    cli.USUARIO
                                                }
                                                into g
                                                orderby g.Sum(p => p.CONT) descending
                                                select new
                                                {
                                                    g.Key.USUARIO,
                                                    TOTAL = g.Sum(p => p.CONT)
                                                });

    return sourceClientes.Select(new Tipo

    {

    CampoA = g.CampoA

    });

    • Sugerido como Resposta Ricardo dos Sntos terça-feira, 16 de fevereiro de 2016 00:14
    • Marcado como Resposta Marcos SJ quarta-feira, 17 de fevereiro de 2016 13:22
    • Não Marcado como Resposta Ricardo-ti2016 quarta-feira, 17 de fevereiro de 2016 14:01
    segunda-feira, 15 de fevereiro de 2016 19:41
  • Bom dia Cesar

    Tentei da sua forma mas não deu certo:

     sourceClientes = (from cli in mdc.CLIENTES
                                              where
                                                (cli.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                &&
                                                cli.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                 )
                                                ||
                                                (cli.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                    && cli.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                                  //group
                                                &&
                                                cli.USUARIO != ""
                                              group cli by new
                                              {
                                                  cli.USUARIO
                                              }
                                                  into g
                                                  orderby g.Sum(p => p.CONT) descending
                                                  select new
                                                  {
                                                      g.Key.USUARIO,
                                                      TOTAL = g.Sum(p => p.CONT)

                                                  });

                            return sourceClientes.Select(new Tipo
                            {
                                Usuarios = g.Key.USUARIO,
                                TOTAL = g.Sum(p => p.CONT)
                            });

    ERRO:

    Error 17 Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<ControledeUsuarios.CLIENTES>'. An explicit conversion exists (are you missing a cast?) C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 115 47 ControledeUsuarios
    Error 18 The type or namespace name 'Tipo' could not be found (are you missing a using directive or an assembly reference?) C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 122 58 ControledeUsuarios

    terça-feira, 16 de fevereiro de 2016 12:42
  • Bom dia Junior

    Tentei do seu jeito porem ainda esta com erro:

    sourceClientes = from cli in mdc.CLIENTES
                                             join CON in mdc.CONTATOS on cli.CODIGO equals CON.CLIENTE
                                             where
                                               (CON.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                               &&
                                               CON.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                               ||
                                               (CON.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                   && CON.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                               )
                                             &&
                                             CON.USUARIO != ""
                                             group CON by new
                                             {
                                                 CON.USUARIO
                                             } into g
                                             orderby g.Sum(p => p.CONT) descending
                                             select new BestSeller
                                             {
                                                 g.Key.USUARIO,
                                                 TOTAL = g.Sum(p => p.CONT)
                                             };

    ERRO:

    Error 17 The type or namespace name 'BestSeller' could not be found (are you missing a using directive or an assembly reference?) C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 158 53 ControledeUsuarios
    Error 18 Invalid initializer member declarator C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 160 46 ControledeUsuarios

    terça-feira, 16 de fevereiro de 2016 12:49
  • o new Tipo tem que ser a sua classe de cliente, new Clientes!!!
    terça-feira, 16 de fevereiro de 2016 12:56
  • Desculpe por demorar a entender

    Coloquei o Tipo como uma Classe.

    Porem ainda continua com erros:

    sourceClientes = (from cli in mdc.CLIENTES
                                              where
                                                (cli.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                &&
                                                cli.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                 )
                                                ||
                                                (cli.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                    && cli.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                                  //group
                                                &&
                                                cli.USUARIO != ""
                                              group cli by new
                                              {
                                                  cli.USUARIO
                                              }
                                                  into g
                                                  orderby g.Sum(p => p.CONT) descending
                                                  select new
                                                  {
                                                      g.Key.USUARIO,
                                                      TOTAL = g.Sum(p => p.CONT)

                                                  });

                            return sourceClientes.Select(new TIPO
                            {
                                Usuarios = g.Key.USUARIO,
                                TOTAL = g.Sum(p => p.CONT)
                            });

    ERROS:

    Error 17 Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<ControledeUsuarios.CLIENTES>'. An explicit conversion exists (are you missing a cast?) C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 115 47 ControledeUsuarios
    Error 18 The type arguments for method 'System.Linq.Queryable.Select<TSource,TResult>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource,TResult>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 122 32 ControledeUsuarios
    Error 19 'ControledeUsuarios.TIPO' does not contain a definition for 'Usuarios' C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 124 29 ControledeUsuarios
    Error 20 The name 'g' does not exist in the current context C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 124 40 ControledeUsuarios
    Error 21 'ControledeUsuarios.TIPO' does not contain a definition for 'TOTAL' C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 125 29 ControledeUsuarios
    Error 22 The name 'g' does not exist in the current context C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 125 37 ControledeUsuarios

    terça-feira, 16 de fevereiro de 2016 13:29
  • Boa tarde Ricardo-ti2016,

    Você já criou esta thread. Irei mesclar esta com a anterior.

    Atenciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    • Editado Marcos SJ quarta-feira, 17 de fevereiro de 2016 17:38
    quarta-feira, 17 de fevereiro de 2016 17:34
  • Boa Tarde Pessoal

    Por favor como eu resolvo o problema com meu codigo C# usando linq

                                              

     if (tbDATAINICIAL.Text != "" && tbDATAFINAL.Text != "" && DropDownListModulo.Text == "CONTATOS")
                        {
                            sourceClientes = from cli in mdc.CLIENTES
                                             join CON in mdc.CONTATOS on cli.CODIGO equals CON.CLIENTE
                                             where
                                               (CON.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                               &&
                                               CON.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                               ||
                                               (CON.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                   && CON.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                               )
                                             &&
                                             CON.USUARIO != ""
                                             group CON by new
                                             {
                                                 CON.USUARIO
                                             } into g
                                             orderby g.Sum(p => p.CONT) descending
                                             select new
                                             {
                                                 g.Key.USUARIO,
                                                 TOTAL = g.Sum(p => p.CONT)
                                             };

                        }

    ERRO:

    Error 17 Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<ControledeUsuarios.CLIENTES>'. An explicit conversion exists (are you missing a cast?) C:\ARTSIM\SGSIM\ControledeUsuarios\RProdutividade.aspx.cs 158 42 ControledeUsuarios

    • Mesclado Marcos SJ quarta-feira, 17 de fevereiro de 2016 19:43 thread duplicada
    quarta-feira, 17 de fevereiro de 2016 19:35
  • coloquei dessa forma:

                                                                     

    if (tbDATAINICIAL.Text != "" && tbDATAFINAL.Text != ""  && D

    ropDownListModulo.Text == "CLIENTES")
                        {
                            sourceClientes = (from cli in mdc.CLIENTES
                                              where
                                                (cli.DATACADASTRO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                &&
                                                cli.DATACADASTRO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                 )
                                                || 
                                                (cli.DATAATUALIZACAO >= DateTime.Parse(tbDATAINICIAL.Text.Trim())
                                                    && cli.DATAATUALIZACAO <= DateTime.Parse(tbDATAFINAL.Text.Trim())
                                                )
                                                  //group
                                                &&
                                                cli.USUARIO != ""
                                              group cli by new
                                              {
                                                  cli.USUARIO
                                              }
                                                  into g
                                                  orderby g.Sum(p => p.CONT) descending
                                                  select new ControledeUsuarios.CLIENTES
                                                  {
                                                      USUARIO = g.Key.USUARIO,
                                                      CONT = g.Sum(p => p.CONT)

                                                  });



                        }

    Agora não da mais erro, porem não traz dados no meu GridView 

     gwDados.DataSource = sourceClientes;
                    gwDados.DataBind();

    Agora não entendi. Esse código no SQL Server funciona perfeitamente porem sem linq

    Alguem  pode me ajudar por favor

    Obrigado

    quinta-feira, 18 de fevereiro de 2016 11:56