none
Linq com Join RRS feed

  • Pergunta

  • Galera bom dia 

    Estou precisando criar uma consulta linq com join mais esta com problema estou usa EF Database sql server  e visual studio 2013, quando faço a consulta ele a retorna o seguinte erro "{"A sequência não contém elementos"}" olha minha consulta:

                // esta action trata o post (login)
                if (ModelState.IsValid) // verificar se é valido
                {
                    using (CadastroEntities contexto = new CadastroEntities())
                    {
                        // consuta que retorna o login com os dados do usuário
                        var vLogin = (from login in contexto.Login
                                      from usuario in contexto.Usuario
                                      where login.Usuario == logon.Usuario
                                      select new
                                      {
                                         usuarioid = login.LoginID,
                                         senha = login.Senha,
                                         usuario = login.Usuario,
                                         nome = usuario.Nome,
                                         acessoatual = usuario.DataAcessoAtual
                                      }).First();
                        // se encontrou o usuário ele grava a session com os dados do próprio
                        if (vLogin != null)
                        {
                            /*Código abaixo verifica se a senha digitada no site se é igual a senha 
                             * que está sendo retornada do banco. Caso não cai direto no else*/
                            if (Equals(vLogin.senha, logon.Senha))
                            {
                                FormsAuthentication.SetAuthCookie(vLogin.usuario, false);
                                Session["UsuarioId"] = vLogin.usuario.ToString();
                                Session["Login"] = vLogin.nome.ToString();
                                return RedirectToAction("Index");
                            }
                            else
                            {
                                /*Escreve na tela a mensagem de erro informando que a senha está errada*/
                                ModelState.AddModelError("", "Senha informado inválido!!!");
                            }
                        }
                        else
                        {
                            /*Escreve na tela a mensagem de erro informada que usuário não existe*/
                            ModelState.AddModelError("", "Usário informado inválido!!!");
                        }
                    }

    quinta-feira, 11 de maio de 2017 12:07

Respostas

  • Primeiro, experimenta trocar a verificação para: 

    if (vLogin.senha == logon.Senha) ou if (vLogin.senha.Equals(logon.Senha))

    Dependendo de qual dos exemplos que você utilizou, também pode ser que a senha (em vLogin.senha) esteja com valor null. Agora se você já confirmou que há valor para vLogin.senha, verifique se não foi inserido espaço no valor da senha ou algum caractere especial. Experimente trocar a senha, prestando atenção em cada dígito para ter certeza do conteúdo.

    • Marcado como Resposta CLAUDIO JOSE quinta-feira, 11 de maio de 2017 20:56
    quinta-feira, 11 de maio de 2017 19:37

Todas as Respostas

  • Olá, Claudio!

       Primeiro tente estas opções:

     var vLogin = (from login in contexto.Login
                                      from usuario in contexto.Usuario
                                      where login.Usuario == logon.Usuario
                                      select new
                                      {
                                         usuarioid = login.LoginID,
                                         senha = login.Senha,
                                         usuario = login.Usuario,
                                         nome = usuario.Nome,
                                         acessoatual = usuario.DataAcessoAtual
                                      }).FirstOrDefault();

    ou

     var vLogin = (from login in contexto.Login.DefaultIfEmpty()
                                      from usuario in contexto.Usuario.DefaultIfEmpty()
                                      where login.Usuario == logon.Usuario
                                      select new
                                      {
                                         usuarioid = login.LoginID,
                                         senha = login.Senha,
                                         usuario = login.Usuario,
                                         nome = usuario.Nome,
                                         acessoatual = usuario.DataAcessoAtual
                                      }).FirstOrDefault();

    ou ainda

     var vLogin = (from login in contexto.Login
                                      from usuario in contexto.Usuario
                                      where login.Usuario == logon.Usuario
                                      select new
                                      {
                                         usuarioid = login?.LoginID ?? null,
                                         senha = login?.Senha ?? null,
                                         usuario = login?.Usuario ?? null,
                                         nome = usuario?.Nome ?? null,
                                         acessoatual = usuario?.DataAcessoAtual ?? null
                                      }).FirstOrDefault();

    Neste último exemplo, provavelmente você terá um registro, mas terá de verificar se o valor do id do usuário, por exemplo, é null ou algo assim. Espero que ajude.

    Bom trabalho!

    • Sugerido como Resposta Rodrigo CdS quinta-feira, 11 de maio de 2017 21:27
    quinta-feira, 11 de maio de 2017 12:54
  • Opa funcionou agora estou com um problema eu verifico se a senha esta correta com um if que vou postar abaixo e mesmo que eu digitar a senha certo ele esta falando que esta errado olha o código:]

                        // se encontrou o usuário ele grava a session com os dados do próprio
                        if (vLogin != null)
                        {
                            /*Código abaixo verifica se a senha digitada no site se é igual a senha 
                             * que está sendo retornada do banco. Caso não cai direto no else*/
                            if (Equals(vLogin.senha, logon.Senha))
                            {
                                FormsAuthentication.SetAuthCookie(vLogin.usuario, false);
                                Session["UsuarioId"] = vLogin.usuario.ToString();
                                Session["Login"] = vLogin.nome.ToString();
                                return RedirectToAction("Index");
                            }
                            else
                            {
                                /*Escreve na tela a mensagem de erro informando que a senha está errada*/
                                ModelState.AddModelError("", "Senha informado inválido!!!");
                            }
                        }
                        else
                        {
                            /*Escreve na tela a mensagem de erro informada que usuário não existe*/
                            ModelState.AddModelError("", "Usário informado inválido!!!");
                        }
                    }

    quinta-feira, 11 de maio de 2017 16:57
  • Primeiro, experimenta trocar a verificação para: 

    if (vLogin.senha == logon.Senha) ou if (vLogin.senha.Equals(logon.Senha))

    Dependendo de qual dos exemplos que você utilizou, também pode ser que a senha (em vLogin.senha) esteja com valor null. Agora se você já confirmou que há valor para vLogin.senha, verifique se não foi inserido espaço no valor da senha ou algum caractere especial. Experimente trocar a senha, prestando atenção em cada dígito para ter certeza do conteúdo.

    • Marcado como Resposta CLAUDIO JOSE quinta-feira, 11 de maio de 2017 20:56
    quinta-feira, 11 de maio de 2017 19:37
  • Consegui era espaço na variável retorno ficou assim:

    if (vLogin.senha.TrimEnd()' == logon.Senha)

    Aproveitando o tópico não sei se pode eu queria atualizar o banco o acesso do usuário e data do ultimo acesso por exemplo o ultimo acesso vai ser a data de acesso atual e se a data de acesso atual for diferente do dia ele atualiza.

    quinta-feira, 11 de maio de 2017 20:34
  • Consegui era espaço na variável retorno ficou assim:

    if (vLogin.senha.TrimEnd()' == logon.Senha)

    Aproveitando o tópico não sei se pode eu queria atualizar o banco o acesso do usuário e data do ultimo acesso por exemplo o ultimo acesso vai ser a data de acesso atual e se a data de acesso atual for diferente do dia ele atualiza.

    Se o espaço está gravado na senha do banco, o espaço faz parte da senha. A não ser que você não permita digitar espaço na senha, aí não irá gravar o espaço. Deveria comparar sem o Trim. Mas isto é apenas uma dica. Sobre a outra dúvida, crie uma nova pergunta, pois está fugindo do tópico desta. Não esqueça de marcar a(s) resposta(s) que te ajudaram, para que outras pessoas que tenham dúvida semelhante possam se orientar.

    Bom trabalho!

    quinta-feira, 11 de maio de 2017 20:42
  • Então na verdade eu criei este usuário na unha no sql server estou fazendo espta apicação para estudo acho que pode ser isso tbm 
    quinta-feira, 11 de maio de 2017 20:54