none
linq com between RRS feed

  • Pergunta

  • Tenho um linq um tanto qto complexo sei que para usar o between tem que ser datainicial >= && dafinal <= mais tenho mais clásulas no where e tenho esse mesmo select sem o linq e ele me retorna dados e com linq não o que pode estar errado ? já coloquei tudo em apenas um parenteses e depois coloquei um parenteses só para o between mesmo assim o result vem em branco.

    ai está meu linq

    var consulta = from c in db.tabela.Where(c => c.Cdempr == sessao && (c.Dtmovi >= datainici && c.Dtmovi <= datafinal) && c.Flstat == op  ) select c;
    


    Junior
    segunda-feira, 27 de junho de 2011 18:47

Respostas

  • João, resolvi quebrei o where e notei que o erro estava na concatenação e ficou assim

    var consulta = from c in db.tabela.Where(c => c.Cdempr == sessao && c.Flstat == op && (c.Dtmovi >= datainici && c.Dtmovi <= datafinal)) select c; 
    


    Junior
    • Marcado como Resposta Junior_luiz terça-feira, 28 de junho de 2011 11:53
    terça-feira, 28 de junho de 2011 11:53

Todas as Respostas

  • Já tentou debugar e ver se os valores de datainici e datafinal estão corretos?

     

     


    João Paulo Gomes http://johnowl.com/
    segunda-feira, 27 de junho de 2011 18:54
  • já debuggei e os valores da data estão corretos ou seja no meu teste está '01/05/2011 00:00:00' a '31/05/2011 00:00:00' pois estou pegando essas datas de uma string e converto antes aqui

    var datainici = Convert.ToDateTime(dtini);
           var datafinal = Convert.ToDateTime(dtfim);
    


    Junior
    segunda-feira, 27 de junho de 2011 18:59
  • Tente assim:

    var consulta = from c in db.tabela.Where(c => (c.Cdempr == sessao && (c.Dtmovi >= datainici && c.Dtmovi <= datafinal) && c.Flstat == op)) select c;
    



    João Paulo Gomes http://johnowl.com/
    segunda-feira, 27 de junho de 2011 19:01
  • continua não trazendo

     


    Junior
    segunda-feira, 27 de junho de 2011 19:06
  • Dúvida, pq vc está usando a query assim:

     

    var consulta = from c in db.tabela.Where(c => (c.Cdempr == sessao && (c.Dtmovi >= datainici && c.Dtmovi <= datafinal) && c.Flstat == op)) select c;
    


    ao invés de assim:

    var consulta = from c in db.tabela where c.Cdempr == sessao && (c.Dtmovi >= datainici && c.Dtmovi <= datafinal) && c.Flstat == op select c;
    


    Não conheço muito de linq, mas nos exemplos que vi estão todos como no segundo exemplo acima. Já tentou executar o SQL direto no banco pra ver se retorna algo?

     

     


    João Paulo Gomes http://johnowl.com/
    segunda-feira, 27 de junho de 2011 19:40
  • João é como falei acima, nesse caso eu tenho um sistema em produção feito em webforms e como forma de estudo estou desenvolvendo em mvc essa consulta eu tenho em webforms com esses mesmos parametros e lá me retorna registros, aqui não está retornando.

    Olhando no dbbuger os valores são esses

    sessao = 35; dataini = 01/05/2001 00:00:00; datafinal = 31/05/2011 00:00:00 ; op = 0

    Se passo esses parametros no webforms ou no query analiser me rertorna dados.


    Junior
    segunda-feira, 27 de junho de 2011 19:51
  • Entendi, então só vendo a query que o linq está gerando para saber o que está acontecendo:

    http://www.thereforesystems.com/view-query-generate-by-linq-to-sql/

     

     


    João Paulo Gomes http://johnowl.com/
    segunda-feira, 27 de junho de 2011 19:58
  • João, resolvi quebrei o where e notei que o erro estava na concatenação e ficou assim

    var consulta = from c in db.tabela.Where(c => c.Cdempr == sessao && c.Flstat == op && (c.Dtmovi >= datainici && c.Dtmovi <= datafinal)) select c; 
    


    Junior
    • Marcado como Resposta Junior_luiz terça-feira, 28 de junho de 2011 11:53
    terça-feira, 28 de junho de 2011 11:53