Erro Consulta LINQ to Entity framework

20/10/2014

0

Estou tentando fazer uma consulta complexa. Para fins de entendimento, vou colocar ela de forma resumida. O erro que aparece é:

An unhandled exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll

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

O código é:

        private void barBtnFiltrar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            PesquisaBETAEntities pb = new PesquisaBETAEntities();

            var dados = (from t0 in
                             (from v1 in pb.view_ok
                                 where Convert.ToString(v1.resu8).Contains("") && Convert.ToString(v1.resu9).Contains("")
                                 && Convert.ToString(v1.resu10).Contains("") && Convert.ToString(v1.resu11).Contains("") && Convert.ToString(v1.sexo).Contains("")
                                 group v1 by new
                                 {
                                     v1.prof_nome,
                                     v1.resu1
                                 } into g
                                 select new
                                 {
                                     g.Key.prof_nome,
                                     g.Key.resu1,
                                     perguntas = g.Count(p => p.resu1 != null)
                                 })
                         where
                           t0.prof_nome.Contains("Elber Rizziolli Domingos")
                         orderby t0.resu1
                         select new
                         {
                             Professor = t0.prof_nome,
                             resultado = Convert.ToString(t0.resu1) == "60" ? "Regular" : Convert.ToString(t0.resu1) == "80" ? "Bom" :
                             Convert.ToString(t0.resu1) == "90" ? "Ótimo" : Convert.ToString(t0.resu1) == "100" ? "Excelente" : null,
                             p1 = (int?)t0.perguntas,
                         });
           
            gridControl1.DataSource = dados.ToList();
            gridControl1.Refresh();
        }
Elber Domingos

Elber Domingos

Responder

Post mais votado

22/10/2014

O que foi dito é que o Convert.ToString() não funciona dentro do LINQ e não o Contains. Mas fico feliz por você ter encontrado a solução e mais importante. Postou-a aqui. Isso é bem legal. Sucesso.

Pjava

Pjava
Responder

Mais Posts

20/10/2014

Pjava

Não entendi porque precisa disso: Convert.ToString(....). Isso não funciona no LINQ
Responder

20/10/2014

Elber Domingos

Fiz isso porque a entrada de dados é integer mas preciso mostrar uma string. Portanto preciso de um aliás. Isso funcionou no LINQPad e não reclamou no visual studio, mas como faço isso sem usar a conversão?
Responder

20/10/2014

Elber Domingos

Eu tirei o Convert.Tostring e funcionou. Mas eu preciso filtrar de forma dinamica e aceitar receber valor nulo. Quando uso o .Contains, ele aceita nulo, e pesquisa tudo quando vem valor nulo, mas só faz isso com string.

Como faço pra aceitar em inteiro ou ainda transformar o inteiro em string para aceitar o Contains?

 PesquisaBETAEntities pb = new PesquisaBETAEntities();

            var dados = (from t0 in
                             (from v1 in pb.view_ok
                              /*
                                 where Convert.ToString(v1.resu8).Contains("") && Convert.ToString(v1.resu9).Contains("")
                                 && Convert.ToString(v1.resu10).Contains("") && Convert.ToString(v1.resu11).Contains("") && Convert.ToString(v1.sexo).Contains("")
                               */ 
                                 group v1 by new
                                 {
                                     v1.prof_nome,
                                     v1.resu1
                                 } into g
                                 select new
                                 {
                                     g.Key.prof_nome,
                                     g.Key.resu1,
                                     perguntas = g.Count(p => p.resu1 != null)
                                 })
                         where
                           t0.prof_nome.Contains("Elber Rizziolli Domingos")
                         orderby t0.resu1
                         select new
                         {
                             Professor = t0.prof_nome,
                             /*
                             resultado = Convert.ToString(t0.resu1) == "60" ? "Regular" : Convert.ToString(t0.resu1) == "80" ? "Bom" :
                             Convert.ToString(t0.resu1) == "90" ? "Ótimo" : Convert.ToString(t0.resu1) == "100" ? "Excelente" : null,
                              */ 
                             p1 = (int?)t0.perguntas,
                         });
           
            gridControl1.DataSource = dados.ToList();
            gridControl1.Refresh();
        }
Responder

20/10/2014

Elber Domingos

Obrigado, creio que é isso mesmo.
Responder

20/10/2014

Elber Domingos

Apenas a título de informação, consegui o que precisava. Tem como pesquisar o Contains direto pelo LINQ sem precisar usar o where fora. Aqui está o código:

  private void barBtnFiltrar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            PesquisaBETAEntities pb = new PesquisaBETAEntities();

            var dados = (from t0 in
                             (from v1 in pb.view_ok
                              
                                 where SqlFunctions.StringConvert((decimal)v1.resu8).Contains("") && SqlFunctions.StringConvert((decimal)v1.resu9).Contains("")
                                 && SqlFunctions.StringConvert((decimal)v1.resu10).Contains("") && SqlFunctions.StringConvert((decimal)v1.resu11).Contains("")
                                 && SqlFunctions.StringConvert((decimal)v1.sexo).Contains("")
                               
                                 group v1 by new
                                 {
                                     v1.prof_nome,
                                     v1.resu1
                                 } into g
                                 select new
                                 {
                                     g.Key.prof_nome,
                                     g.Key.resu1,
                                     perguntas = g.Count(p => p.resu1 != null)
                                 })
                         where
                           t0.prof_nome.Contains("Elber Rizziolli Domingos")
                         orderby t0.resu1
                         select new
                         {
                             Professor = t0.prof_nome,
                             resultado = t0.resu1 == 60 ? "Regular" : t0.resu1 == 80 ? "Bom" : t0.resu1 == 90 ? "Ótimo" : t0.resu1 == 100 ? "Excelente" : null,
                             p1 = (int?)t0.perguntas,
                         });
           
            gridControl1.DataSource = dados.ToList();
            gridControl1.Refresh();
        }
    }
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar