none
Join com campos de tipos diferentes RRS feed

  • Pergunta

  • Bom dia,

    É possível fazer uma query onde os campos do join são de tipos diferentes, na query abaixo o campo tbProduto.CD_USUARIO é string, enquanto o tbUsuario.PK_USUARIO é inteiro. Já tentei converter mas dá erro.

    var consult = (from tbProduto in db.TB_Produto
                          join tbUsuario in db.TB_USUARIO on tbProduto.CD_USUARIO equals tbUsuario.PK_USUARIO select tbProduto)

    Obrigada!

    quarta-feira, 9 de maio de 2012 13:54

Respostas

  • Tente isso:

    var consult = (from tbProduto in db.TB_Produto
                   from tbUsuario in db.TB_USUARIO 
                   select new 
                   {
                      Produto = tbProduto
                      Usuario = tbUsuario
                   }
                   )
                   .ToList()
                   .Where(x=> x.Produto.CD_USUARIO == x.Usuario.PK_USUARIO.ToString())
                   .Select(x=> x)
                   .ToList();

    Nas consultas LINQ sempre dá esse erro quando você tenta fazer a conversão no select. Sendo assim, você primeiro deve realizar o Select de todos os valores para depois de recuperados fazer a conversão.

    Eu sempre utilizo assim e funciona.

    Espero que dê certo para você.

    Abraços!


    Deise Vicentin
    "Eu não procuro saber as respostas, procuro compreender as perguntas." Confúcio

    • Marcado como Resposta De_ng quarta-feira, 9 de maio de 2012 15:25
    quarta-feira, 9 de maio de 2012 14:50

Todas as Respostas

  • O nome do campo é realmente PK_Usuario ? Mesmo adicionando uma .ToString() no final não da certo ??

    tbUsuario.PK_USUARIO.ToString()

    Veja este post do forum:
    http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/abcdd633-1786-4bbb-8c1f-4f36f32f2b69

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    quarta-feira, 9 de maio de 2012 14:15
  • O campo é este mesmo, é que houve um erro na modelagem do BD.

    Eu já havia tentando converter o campo que é string para inteiro, o campo que inteiro para string, mas dá o seguinte erro:

    LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression

    quarta-feira, 9 de maio de 2012 14:36
  • Tente isso:

    var consult = (from tbProduto in db.TB_Produto
                   from tbUsuario in db.TB_USUARIO 
                   select new 
                   {
                      Produto = tbProduto
                      Usuario = tbUsuario
                   }
                   )
                   .ToList()
                   .Where(x=> x.Produto.CD_USUARIO == x.Usuario.PK_USUARIO.ToString())
                   .Select(x=> x)
                   .ToList();

    Nas consultas LINQ sempre dá esse erro quando você tenta fazer a conversão no select. Sendo assim, você primeiro deve realizar o Select de todos os valores para depois de recuperados fazer a conversão.

    Eu sempre utilizo assim e funciona.

    Espero que dê certo para você.

    Abraços!


    Deise Vicentin
    "Eu não procuro saber as respostas, procuro compreender as perguntas." Confúcio

    • Marcado como Resposta De_ng quarta-feira, 9 de maio de 2012 15:25
    quarta-feira, 9 de maio de 2012 14:50
  • Olá De_Ng,

    Tudo beleza?

    Veja se isso ajuda:

    var consult = (from tbProduto in db.TB_Produto
                   join tbUsuario in db.TB_USUARIO on new { ID = tbProduto.CD_USUARIO} equals new { ID = tbUsuario.PK_USUARIO.ToString()} select tbProduto)

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    quarta-feira, 9 de maio de 2012 15:20
    Moderador
  • Oi Deise,

    Obrigada!

    Era que o que eu precisava.

    quarta-feira, 9 de maio de 2012 15:25
  • Oi Fernando,

    Obrigada, mas desta forma tb dá erro na conversão.

    quarta-feira, 9 de maio de 2012 21:14