none
Duvida funcao dentro da expressao RRS feed

  • Pergunta

  • Pessoal,

    Nao consigo passa um funcao no objeto, exemplo

    var ID = (from a in db.Imoveis where objUtils.RemoveAcentos(a.Nome) == _Nome && a.Ativo == true select a.idImovel).SingleOrDefault();

    Ele me devolve erro, qual seria a melhor forma de fazer isso , e possivel?

    No sql seria assim

    			SELECT a.idImovel FROM Imoveis a (NOLOCK) 
    		WHERE dbo.FormataURLLink(a.Nome) = 'nome-do-imovel' and a.ativo = 1
    

    Obrigado.


    quarta-feira, 13 de dezembro de 2017 20:25

Respostas

  • Olá Rodrigo tudo bem?!

    Está usando usando EF6 ou EF Core?

    Se for o EF6 não há suporte para tradução SQL em funções no lado servidor.

    1 - é preciso avaliar o eval do lado cliente ou seja o método RemoverAcentos deve ser tratado por uma expressão do EF6, no qual seria traduzido para uma função no servidor.

    Foi implementado o suporte DbFunctions na versão 2.0

    Sua chamada seria bem simples se fosse em EF Core, você poderia fazer algo assim:

    [DbFunction("RemoverAcentos ")]
    public static string RemoverAcentos(string nome)
        => nome;

    Dessa forma teria uma tradução no servidor e no eval/client!

    Caso contrario de forma arbitraria o EF6 simplesmente irá desconsiderar sua função no processamento do servidor.

    Mais para dizer que não existe solução você pode usar o SqlQuery do EF6



    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer C#
    Development Leader at JAMSOFT Informática
    Microsoft Certified Professional
    Criador e Mantenedor do EntityFramework Core for Firebird
    Contribuidor do EntityFramework Core
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter



    quinta-feira, 14 de dezembro de 2017 00:39

Todas as Respostas

  • Olá Rodrigo tudo bem?!

    Está usando usando EF6 ou EF Core?

    Se for o EF6 não há suporte para tradução SQL em funções no lado servidor.

    1 - é preciso avaliar o eval do lado cliente ou seja o método RemoverAcentos deve ser tratado por uma expressão do EF6, no qual seria traduzido para uma função no servidor.

    Foi implementado o suporte DbFunctions na versão 2.0

    Sua chamada seria bem simples se fosse em EF Core, você poderia fazer algo assim:

    [DbFunction("RemoverAcentos ")]
    public static string RemoverAcentos(string nome)
        => nome;

    Dessa forma teria uma tradução no servidor e no eval/client!

    Caso contrario de forma arbitraria o EF6 simplesmente irá desconsiderar sua função no processamento do servidor.

    Mais para dizer que não existe solução você pode usar o SqlQuery do EF6



    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer C#
    Development Leader at JAMSOFT Informática
    Microsoft Certified Professional
    Criador e Mantenedor do EntityFramework Core for Firebird
    Contribuidor do EntityFramework Core
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter



    quinta-feira, 14 de dezembro de 2017 00:39
  • Obrigado amigo.

    Valeu pela dica, eu acabei fazendo assim no final.

    int id_ = db.Database.SqlQuery<int>("getIdByNome {0}", new object[] { _Nome }).SingleOrDefault();

    Obrigado.

    quinta-feira, 14 de dezembro de 2017 20:53