.NET - NHibernate e ActiveRecord - Dúvida com Detached Criteria - Conversão de DateTime

Galera, eu tenho essa query no banco sql server:

select h.Tipo, h.Cartao, h.Data from tblInnerHorarios h where h.Tipo = '003' and h.Cartao like '%008' and CONVERT(CHAR,h.Data, 103) = '04/11/2009' order by h.Data desc

e tenho isso no detached criteria:

[code] DateTime data = u.DtAntepenultimaEntrada.Value.Date;
DetachedCriteria cr = DetachedCriteria.For();
cr.Add(Expression.Eq(“Tipo”, “003”));
cr.Add(Expression.Eq(“Cartao”, u.Cartao));

//Já tentei isso! Retorna null pq não acha nada no banco.
//cr.Add(Expression.Eq(“DtAtual”, data));

//Já tentei isso!
//cr.Add(Restrictions.Eq(Projections.SqlFunction(“convert(char, DtAtual, 103) = ?”, NHibernateUtil.DateTime, Projections.Property(“DtAtual”)), data));

//tbm ja tentei isso!!
//cr.Add(Restrictions.Eq(Projections.SqlFunction(“convert”, NHibernateUtil.Character, Projections.Property(“DtAtual”)), data));

var horario = ActiveRecordMediator.FindFirst(cr, Order.Desc(“DtAtual”));
h = horario;

return h.DtAtual;[/code]

alguem pode me ajudar nessa questao da conversao de datas. Achei um post aki falando exatamente o q eu qria, mas com o Hibernate. Preciso que funcione usando o NHibernate.
Acredito q deve esta entre o restriction e o projection!

ajuda aew

agradeço

Olá thursilva,

Tenho usado sem problemas o Criteria do NHibernate com datas, já usava antes Hibernate com java também.
Obs. Eu uso o Restrictions em vez de Expression pois este está ‘semi-deprecated’.

No teu caso eu faria assim:

DetachedCriteria cr = DetachedCriteria.For<Horario>(); cr.Add(Restrictions.Eq("Tipo", "003")); // Você quer somente o Cartão que terminar com '008' certo? , neste caso não inclua o % do SQL. Ou for like %..% use MatchMode.Anywhere cr.Add(Restrictions.Like("Cartao", u.Cartao,MatchMode.End)); cr.Add(Restrictions.Eq("DtAtual", data));
Pode ser que o que esteja fazendo retornar null não seja a data mas o campo que usa ‘like’

Boa sorte aí!