Ich möchte in einem DateTime-Feld nicht nur nach einem Datumsbereich, sondern auch nach einem Zeitbereich suchen können. Zum Beispiel: "Hol mir alle Datensätze im Monat Mai, die zwischen 13 und 15 Uhr erstellt wurden". Die SQL Ich bin auf der Suche generiert ist:Verwenden Sie Linq zu SQL, um nur Zeitabschnitte eines Datums in SQL 2008 zu suchen
WHERE CreatedOn BETWEEN '05/01/2010' AND '06/01/2010' AND CONVERT(time(4), CreatedOn) BETWEEN '01:00 PM' AND '03:00 PM'
Ich kann nicht scheinen, um herauszufinden, wie man einen Lambda-Ausdruck, um mich dorthin zu gelangen. Hat jemand eine Ahnung? Ich habe System.Linq.Dynamic in meinem Projekt. Ähnlich wie Sie eine Zeichenfolge als OrderBy-Klausel übergeben kann, dachte ich, ich könnte in der Lage sein, das gleiche mit dem Wo-Methode zu tun, wie folgt ::
results = results.Where("CONVERT(time(4), OccurredOn) BETWEEN '{0}' AND '{1}'", Criteria.OffenseTimeStart, Criteria.OffenseTimeEnd);
Aber das löst eine Ausnahme in System.Linq.Dynamic . Hat jemand irgendwelche Hinweise?
DANKE FÜR DIE HILFE! Hier ist mein Arbeitscode-Auszug. Ich ausgesetzt meine Zeit Kriterien Eigenschaften wie Timespans:
if (Criteria.OffenseDateStart.HasValue)
results = results.Where(o => o.OccurredOn >= Criteria.OffenseDateStart);
if (Criteria.OffenseDateEnd.HasValue)
results = results.Where(o => o.OccurredOn <= Criteria.OffenseDateEnd);
if (Criteria.OffenseTimeStart.HasValue)
results = results.Where(o => o.OccurredOn.TimeOfDay >= Criteria.OffenseTimeStart);
if (Criteria.OffenseTimeEnd.HasValue)
results = results.Where(o => o.OccurredOn.TimeOfDay <= Criteria.OffenseTimeEnd);
Die erzeugte SQL etwas ausführlicher, aber wirkt wie ein Zauber! Ich dachte nicht, dass es eine TimeSpan SQL-Übersetzung gibt ... aber ich glaube ich lag falsch. Vielen Dank! –
Ich denke, was in NHibernate 3.0 produziert wird, ist schöner, aber zumindest funktioniert es :) froh, zu helfen. – Phill