0

Я сохраняю как дату, так и время как DateTime в моей базе данных SQL Server, и у меня есть свойство DateTime в моих сопоставлениях. В моем запросе мне нужно получить доступ к дате отдельно и времени. С момента у меня нет никаких проблем, но при попытке получить время из DateTime я получаю следующее сообщение об ошибке:NHibernate QueryOver получить время из свойства datetime

Additional information: could not resolve property: TimeOfDay of: IWS.DataContracts.ServicesPlanning

Экономия времени в другое имущество не то, что я хочу, хотя я пробовал и не могу получить его также работает.

Запрос с QueryOver:

Session.QueryOver<ServicesPlanning>() 
    .JoinAlias(x => x.TeamMember,() => stm) 
    .Where(() => stm.Id == _memberId) 
    .Where(x => (x.AllDay && (x.StartDate == _startDate && x.EndDate == _endDate)) || 
     (!x.AllDay && x.StartDate.Date == _startDate && x.EndDate.Date == _endDate 
       && (x.StartDate.TimeOfDay > _endTime.Value || x.EndDate.TimeOfDay < _startTime.Value))) 
    .RowCount() > 0; 

запросов с помощью LINQ:

return Session 
     .Query<ServicesPlanning>() 
     .Where(x => x.TeamMember.Id == _memberId) 
     .Any(x => (x.AllDay && (x.StartDate.Date == _startDate && x.EndDate.Date == _endDate)) || 
     (!x.AllDay && x.StartDate.Date == _startDate && x.EndDate.Date == _endDate && (x.StartDate.TimeOfDay > _endTime.Value || x.EndDate.TimeOfDay < _startTime.Value))); 

Цель запроса: проверить, если уже есть планирование с этой даты или времени, поэтому мы не имеем дублирования.

Любая помощь очень ценится!

+0

Have вы попробовали LINQ вместо QueryOver? –

+0

@PhilDegenhardt Да, но я, похоже, получаю ту же ошибку. Я также отправлю свой запрос LINQ выше. –

ответ

1

Вместо того, чтобы пытаться манипулировать тем, что находится в базе данных для сравнения, почему бы вам не настроить параметр?

Если база данных содержит, например 2016-01-01T08:00:00 как дата, и вы хотите запросить записи с датой на 2016-01-01 независимо от времени, вы можете запросить дату «между» 2016-01-01T00:00:00 и 2016-01-01T23:59:59, например, так:

.Where(x => (x.AllDay && (x.StartDate == _startDate && x.EndDate == _endDate)) || 
    (!x.AllDay && x.StartDate >= _startDate.Date && x.StartDate < _startDate.Date.AddDays(1))... 
+0

Я думаю, это, с NH является единственным текущим вариантом. NH нужно будет сказать, как перевести свойство DateTime.TimeOfDay в его эквивалент SQL, если таковой был. – hometoast

+0

Но проблема в том, что мне нужно проверить время. Это простой календарь, поэтому мои проверки состоят в том, что я не могу иметь 2 события в одно и то же время. –

Смежные вопросы