Критерии фильтра NHibernate - Час DateTime - PullRequest
0 голосов
/ 12 января 2010

Мне трудно убедить NHibernate (EF смог это сделать) для фильтрации на основе свойства Hour свойства объекта DateTime. Моя сущность выглядит примерно так:

public class Invoice {
    // ...
    public DateTime Time { get; set; }
    // ...
}

Мне нужно получить все счета, которые были «сделаны» в определенный час (скажем, 22). Возможный запрос может быть:

from   i in s.Linq<Invoice>()
where  i.Type.Id == Invoice.Type.Local &&
       i.TimeOfRegister.Hour == 22
select i

Однако мне выдается исключение, утверждающее, что свойство Hour of TimeOfRegister не может быть разрешено ...

LE: Сведения об исключении: не удалось разрешить свойство: TimeOfRegister.Hour of: MyCompany.Entities.Invoice

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Похоже, что NHibernate не видит DateTime как компонент, который имеет свойства, которые он может выбирать, он видит его как одно свойство. Вам, вероятно, придется использовать функцию, чтобы получить Часовую часть DateTime.

В HQL для SqlServer2005: час (i.TimeOfRegister)

1 голос
/ 13 января 2010

Мне коллега посоветовал выбрать другой маршрут:

Определить свойство int (или байта) для объекта (скажем, "HourOfRegister"), а затем в классе отображения отобразить его вформула:

Map(a => a.HourOfRegister).Formula("DATEPART(HOUR, TimeOfRegister)");

Тогда я могу использовать его в запросе, как мне нравится.

...