0

Ich speichere sowohl das Datum und die Zeit als DateTime in meiner SQL Server-Datenbank, und ich habe eine DateTime-Eigenschaft in meinen Zuordnungen. In meiner Abfrage muss ich auf das Datum einzeln und die Zeit auch zugreifen. Mit Datum habe ich kein Problem, aber wenn die Zeit von Datetime zu erhalten versuchen, erhalte ich Fehler folgende:NHibernate QueryOver Zeit von Datum/Uhrzeit-Eigenschaft

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

die Zeit in einer anderen Eigenschaft sparen ist nicht, was ich will, obwohl ich es versuchte, und kann es nicht bekommen arbeite entweder.

Abfrage mit 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; 

Abfrage mit 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))); 

Zweck der Abfrage: überprüfen, ob es bereits eine Planung mit diesem Datum oder Zeit ist, damit wir nicht Überschneidungen haben.

Jede Hilfe wird sehr geschätzt!

+0

Have Sie haben LINQ anstelle von QueryOver versucht? –

+0

@PhilDegenhardt Ja, aber ich scheine den gleichen Fehler zu bekommen. Ich werde meine LINQ-Abfrage auch oben veröffentlichen. –

Antwort

1

Anstatt zu versuchen, zu manipulieren, was in der Datenbank für den Vergleich ist, warum passen Sie den Parameter nicht an?

Wenn Ihre Datenbank enthält zum Beispiel 2016-01-01T08:00:00 wie Datum, und Sie möchten Datensätze abfragen mit einem Datum auf 2016-01-01 unabhängig von Zeit, können Sie Datum „zwischen“ 2016-01-01T00:00:00 und 2016-01-01T23:59:59, wie so abfragen:

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

Ich denke das ist mit NH die einzige aktuelle Option. NH müsste angegeben werden, wie die DateTime.TimeOfDay-Eigenschaft in ihre SQL-Entsprechung übersetzt wird, falls es eine gab. – hometoast

+0

Aber das Problem ist, ich muss die Zeit überprüfen. Es ist ein einfacher Kalender, so dass ich nicht zwei Events gleichzeitig haben kann. –

Verwandte Themen