Usuário com melhor resposta
linq com between

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
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
Todas as Respostas
-
-
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 -
-
-
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/ -
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 -
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/ -
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