Вот проблема, которую я пытаюсь решить. Я хочу передать дату, а затем получить все заказы, выбранные в этот день, с помощью NHibernate.
Когда я передаю orderPickDate в метод ниже, он никогда не возвращается с результатом. Я не хочу передавать диапазон дат, я просто хочу пропустить одну дату, игнорировать время, и если существуют какие-либо itemOrders с этой датой выбора, вернуть их.
public IList<ItemOrder> GetItemOrderByCriteria(int? itemNumber, int? warehouseNumber, DateTime? orderPickDate)
{
try
{
NHibernate.ICriteria criteria = NHibernateSession.CreateCriteria(typeof(Core.ItemOrder));
if (itemNumber.HasValue)
criteria.CreateCriteria("Item", "Item").Add(Expression.Eq("Item.ItemNumber", itemNumber.Value));
if (warehouseNumber.HasValue)
criteria.CreateCriteria("Warehouse", "Warehouse").Add(Expression.Eq("Warehouse.WarehouseNumber", warehouseNumber));
if (orderPickDate.HasValue)
criteria.Add(Expression.Eq("OrdPickDate", orderPickDate));
return criteria.List<Core.ItemOrder>();
}
catch (NHibernate.HibernateException he)
{
DataAccessException dae = new DataAccessException("NHibernate Exception", he);
throw dae;
}
}
Вот как этот столбец настроен в отображении:
<property name="OrdPickDate" column="ORD_PICK_DATE" type="date" not-null="true"/>
Когда я смотрю на создание sql nhibernate, он добавляет следующее предложение where (я передал его 01.12.2009, 12:00:00 AM):
WHERE this_.ORD_PICK_DATE = '2009-12-01T00:00:00.00'
Если я пытаюсь выполнить запрос в редакторе БД, я получаю сообщение об ошибке «ORA-01861: литерал не соответствует строке формата». Должен ли я использовать другой подход при создании моих критериев?