How to do the where ands of where dynamically with linq and Entity Framework?

3

How can I make ands dynamically in where using Linq and entityFramework?

Thank you in advance for any help.

return _dbContext.TbParceiro                
//Preciso fazer algo do tipo mas isso não funciona, não sei como posso fazer aqui.
.Where(p =>                   

    if (!string.IsNullOrEmpty(mdlParceiroFiltro.FiltroId))
    {
         p.ParceiroId = mdlParceiroFiltro.FiltroId;
    }
)
.OrderBy(p => p.ParceiroId)
.Skip(mdlParceiroFiltro.Pula)
.Take(mdlParceiroFiltro.Pega)
.ToList();

Below is an example that works using string command, I need to do the same thing with Linq.

        sql.Append("SELECT u.Id, u.Nome, u.Usuario ");
        sql.Append("FROM usuario u ");
        sql.Append("WHERE 1 = 1 ");

        if (model != null) 
        {
            if (!string.IsNullOrEmpty(model.Nome))
            {
                sql.Append("AND u.Nome like @Nome ");
                lstParametros.Add(new MySqlParameter() {
                    ParameterName = "@Nome",
                    MySqlDbType = MySqlDbType.String,
                    Value = "%" + model.Nome + "%"
                });
            }

            if (!string.IsNullOrEmpty(model.Usuario))
            {
                sql.Append("AND u.Usuario like @Usuario ");
                lstParametros.Add(new MySqlParameter()
                {
                    ParameterName = "@Usuario",
                    MySqlDbType = MySqlDbType.String,
                    Value = "%" + 
                    model.Usuario + "%"
                });
            }
        }
    
asked by anonymous 12.12.2017 / 18:33

2 answers

3

What you want is to add Where only if mdlParceiroFiltro.FiltroId is not null or empty.

IQueryable<ParceiroModel> entidades = _dbContext.TbParceiro;

// Verifica o FiltroId é válido
if (!string.IsNullOrEmpty(mdlParceiroFiltro.FiltroId))
{
    // Se for válido, você insere o Where
    entidades = entidades.Where(p => p.ParceiroId == mdlParceiroFiltro.FiltroId);
}

return entidades
    .OrderBy(p => p.ParceiroId)
    .Skip(mdlParceiroFiltro.Pula)
    .Take(mdlParceiroFiltro.Pega)
    .ToList();

You can add as many% as you want with LINQ. It will automatically transform to Where underneath the cloths.

    
12.12.2017 / 18:42
2

try with ternary operator:

Syntax: ((bool) ? (se true) : (se falso))

[...].Where(p => (!string.IsNullOrEmpty(model.Nome) ? p.Nome.Contains(model.Nome) : p.Usuario.Contains(model.Usuario))).[...]

Another example:

[...].Where(p => (!string.IsNullOrEmpty(mdlParceiroFiltro.FiltroId) ? p.ParceiroId = mdlParceiroFiltro.FiltroId : true)).[...]
    
12.12.2017 / 18:41