Why this optional parameters LINQ WHERE is not working?

Viewed 89

When MesAno is "" //string.Empty

        DateTime dateAux;
        int ano = 0;
        int mes = 0;
        if (MesAno.Trim() != "" && DateTime.TryParse("01/" + MesAno, out dateAux))
        {
            ano = dateAux.Year;
            mes = dateAux.Month;
        }


                lista = session.Query<Evidencias>().Timeout(30)
                    .Where(m => m.Produto.Distribuidora.Id == myUser.Terceiro.Distribuidora.Id)
                    //.Where(m => MesAno != "" ? (m.DataInclusao.Year == ano && m.DataInclusao.Month == mes) : true)
                    .Where(m => Produto != "" ? m.Produto.CodigoProduto.Contains(Produto) : true)
                    .Where(m => Titular != "" ? m.NomeTitular.Contains(Titular) : true)
                    .Where(m => Instalacao != "" ? m.CodigoInstalacao.Contains(Instalacao) : true)
                    .Where(m => ano != 0 ? m.DataInclusao.Year == ano : true)
                    .Where(m => mes != 0 ? m.DataInclusao.Month == mes : true)
                    .OrderByDescending(m => m.DataInclusao).Take(3000).ToList();

Then the generated SQL WHERE is:

 where produto1_.IdDistribuidora=@P2 and @P3=1 and @P4=1 and @P5=1 and datepart(year, evidencias0_.DataInclusao)=@P6 and datepart(month, evidencias0_.DataInclusao)=@P7 order by evidencias0_.DataInclusao desc',N'@P1 int,@P2 int,@P3 bit,@P4 bit,@P5 bit,@P6 int,@P7 int',3000,1,1,1,1,0,0

The stranger part is:

datepart(year, evidencias0_.DataInclusao)=@P6 and datepart(month, evidencias0_.DataInclusao)=@P7

Why not this:

@P6=1 and @P7=1
1 Answers
Related