LINQ not recognizing method that returns a Boolean

Asked

Viewed 40 times

0

I’m having this mistake when I try to perform a query with the Entity within a Iqueryable.

"LINQ to Entities does not recognize the method 'Boolean Checkpast values(Int32)' method, and this method cannot be Translated into a store Expression."

       public ActionResult AjaxHandler(jQueryDataTableParamModel param, string unidade, bool 
       filtraPorLoja = false, bool filtraSerial = false, int cadastro = 0, int opcaobusca = 0, 
       string valorbusca = ""){

        param.iDisplayLength = param.iDisplayLength == 0 ? 10 : param.iDisplayLength;

        var EhLicenciado = User.IsInRole("Licenciado");
        var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]);
        var sortDirection = Request["sSortDir_0"];

        var clientes = _uow.ClienteApp.Obter();
        #region Filtro Loja
        if (EhLicenciado)
        {
            Usuario userLicenciado = _uow.UsuarioApp.FindByUserName(User.Identity.Name);
            var glUserLic = _uow.GrupoLojaApp.ObterPorId(userLicenciado.GrupoLojaID).ID;
            clientes = clientes.Where(a => a.GrupoLoja.Where(c => c.ID == glUserLic).ToList().Count > 0);
        }
        else
        {
            if (filtraPorLoja) clientes = clientes.Where(c => c.UnidadeDeVendaId.Equals(unidade));
        }
        #endregion

        #region Filtro Status
        if (cadastro != 0)
        {
            switch (cadastro)
            {
                case 1:
                    clientes = clientes.Where(a => a.TipoClienteId == 1);
                    break;

                case 2:
                    clientes = clientes.Where(a => a.TipoClienteId == 2);
                    break;

                case 3:
                    clientes = clientes.Where(a => a.TipoClienteId == 3);
                    break;

                default:
                    clientes = clientes != null ? clientes : null;
                    break;
            }
        }
        #endregion

        #region Filtro Serial
        if (filtraSerial && (!string.IsNullOrEmpty(param.sSearch) || !string.IsNullOrWhiteSpace(param.sSearch)) && param.sSearch.Length >= 3)
            clientes = clientes.Where(c => c.AparelhosCompra.Where(d => d.Serial.ToUpper().Contains(param.sSearch.ToUpper())).Count() > 0);
        #endregion

        #region Filtro Busca Cliente
        if (!filtraSerial && !string.IsNullOrEmpty(param.sSearch) && param.sSearch.Length >= 3)
            clientes = clientes.Where(a => a.FiltroCliente.Trim().ToUpper().Contains(param.sSearch.ToString().Trim().ToUpper()));
        else
        {
            if (opcaobusca != 0)
            {
                switch (opcaobusca)
                {
                    case 1:
                        clientes = !string.IsNullOrEmpty(valorbusca) || !string.IsNullOrWhiteSpace(valorbusca) ?
                            clientes.Where(a => a.ProtheusId.ToString().ToUpper().Trim().Contains(valorbusca.ToString().ToUpper().Trim()))
                        : clientes;
                        break;

                    case 2:
                        clientes = !string.IsNullOrEmpty(valorbusca) || !string.IsNullOrWhiteSpace(valorbusca) ?
                            clientes.Where(a => a.Nome.ToString().ToUpper().Trim().Contains(valorbusca.ToString().ToUpper().Trim()))
                            : clientes;
                        break;

                    case 3:
                        clientes = !string.IsNullOrEmpty(valorbusca) || !string.IsNullOrWhiteSpace(valorbusca) ?
                            clientes.Where(a => a.Cnpj.ToString().ToUpper().Trim().Contains(valorbusca.ToString().ToUpper().Trim()))
                        : clientes;
                        break;

                    case 4:
                        clientes = !string.IsNullOrEmpty(valorbusca) || !string.IsNullOrWhiteSpace(valorbusca) ?
                            clientes.Where(a => a.Telefone.ToString().ToUpper().Trim().Contains(valorbusca.ToString().ToUpper().Trim()))
                        : clientes;
                        break;

                    default:
                        clientes = clientes != null ? clientes : null;
                        break;
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(valorbusca) || !string.IsNullOrWhiteSpace(valorbusca))
                {
                    if (filtraSerial && valorbusca.Length >= 3)
                        clientes = clientes.Where(c => c.AparelhosCompra.Where(d => d.Serial.ToUpper().Contains(valorbusca.Trim().ToUpper())).Count() > 0);
                    else
                        clientes = clientes.Where(a => a.FiltroCliente.Trim().ToUpper().Contains(valorbusca.ToString().Trim().ToUpper()));
                }
                else
                    clientes = clientes != null ? clientes : null;
            }
        }
        #endregion

        #region sortColumnIndex
        switch (sortColumnIndex)
        {
            case 2:
                clientes = sortDirection == "asc" ? clientes.OrderBy(a => a.ProtheusId) : clientes.OrderByDescending(a => a.ProtheusId);
                break;

            case 3:
                clientes = sortDirection == "asc" ? clientes.OrderBy(a => a.Nome) : clientes.OrderByDescending(a => a.Nome);
                break;
            case 4:
                clientes = sortDirection == "asc" ? clientes.OrderBy(a => a.ProtheusId == null || a.ProtheusId == "") : clientes.OrderByDescending(a => a.ProtheusId == null || a.ProtheusId == "");
                break;
        }
        #endregion

        #region clientesComFiltro
        *****var clienteSelect = clientes.Select(c =>
            new
            {
                ClienteId = c.ClienteId.ToString(),
                EnviadoProtheus = (c.ProtheusId != null ^ c.ProtheusId != ""),
                Sincronizar = c.SincronizarComProtheus ? true : false,
                c.ProtheusId,
                Nome = c.Nome.TrimEnd(),
                NomeReduz = c.NomeReduz.TrimEnd(),
                Cnpj = c.Cnpj.TrimEnd(),
                Endereco = c.Endereco.TrimEnd() + " " + c.Bairro.TrimEnd() + " " + c.Municipio.TrimEnd() + " " + c.CodigoEstado.TrimEnd(),
                c.Cep,
                DataNascimento = (c.DataNascimento.Day < 10 ? "0" + c.DataNascimento.Day : c.DataNascimento.Day.ToString()) + "/" + (c.DataNascimento.Month < 10 ? "0" + c.DataNascimento.Month : c.DataNascimento.Month.ToString()) + "/" + c.DataNascimento.Year,
                c.Celular,
                c.Telefone,
                UnidadeDeVenda = c.UnidadeDeVenda != null ? c.UnidadeDeVenda.ADK_NOME : "",
                c.UnidadeDeVendaId,
                c.TipoPessoa,
                c.Ativo,
                BloqDesbloq = c.Ativo ? "<a class='btn btn-danger btn-block btn-xs' title='Bloquear Cliente' onclick='bloquearOuDesbloquear(" + c.ClienteId.ToString() + ")' ><span class='glyphicon glyphicon-ban-circle'></span></a>"
                : "<a class='btn btn-success btn-block btn-xs' title='Desbloquear Cliente' onclick='bloquearOuDesbloquear(" + c.ClienteId.ToString() + ")' ><span class='glyphicon glyphicon-ok'></span></a>",
                Status = c.Status.TrimEnd(),
                c.Canal,
                c.Sexo,
                TipoCadClienteId = c.TipoClienteId,
                TipoCadCliente = c.TipoClienteId == 1 ? "ANÁLISE" : c.TipoClienteId == 2 ? "PROSPECTIVO" : c.TipoClienteId == 3 ? "CLIENTE" : "",
                TemTituloVencido = _uow.ClienteApp.VerificarTitulosVencidos(c.ClienteId), 
            });*****


        var clientesComFiltro = clienteSelect.ToPagedList(param.iDisplayStart / param.iDisplayLength, param.iDisplayLength);
        #endregion

        var json = Json(new
        {
            param.sEcho,
            iTotalRecords = clientesComFiltro.Count(),
            iTotalDisplayRecords = clientes.Count(),
            aaData = clientesComFiltro.ToArray()
        },
        JsonRequestBehavior.AllowGet);
        return json;

And the method you’re pulling would be this one.

      public bool VerificarTitulosVencidos(int clienteId, int diasVencidos)
    {
        var clientConvertido = Convert.ToString(clienteId);

        var testando = _db.TitulosVencidos.Any(c => c.DIASVENC >= diasVencidos && c.ID_CLIENTE == clientConvertido);

        return testando;
    }
  • you are passing only 1 parameter in the Checkpast method that requires 2

  • In this case it is architected with DDD, I pass the second parameter in the service layer.

  • But in this part of the code it is not receiving, it is missing to transport this parameter to this layer. Or you’re calling the method in the wrong layer

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.