2016-06-06 9 views
0

ich in den Prozess der Schaffung eines dynamischen Lambda-Ausdruck bin i einen Vergleich von Datum machen wollen nicht DatetimeC# dynamischen Lambda-Ausdruck von Datum nicht von Datetime-Vergleich

da kein Typ Datum in C# sind wenn i Expression konstant

var dateexpr = Expression.Constant(Convert.ToDateTime(filter.FilterValue).Date, typeof(DateTime)); 

und ich betreibe meine Code erstellen ->

meine Lambda-Ausdruck wie folgt aussehen

query.where(e=>e.createdOn>2016-06-06 00:00:00.000) 

die Zeit existieren immer

, wie ich den Vergleich nur nach Datum laufen lassen kann

Erwartete Expression:

query.where(e=>e.createdOn>2016-06-06) 
+0

Frage konnte Seien Sie klarer, wenn Sie angeben, wie Ihr erwarteter Ausdruck aussieht. – user6144226

+0

Erwarteter Ausdruck query.where (e => e.createdOn> 2016-06-06) – SamirJ

+0

Möchten Sie, dass die Abfrage im Arbeitsspeicher ausgeführt wird oder in einer Datenbank (z. B. mithilfe von Linq für Entitäten)? – iggymoran

Antwort

1

Nun, denken Sie an die Logik. Für greater than:

e.createdOn > 2016-06-06 

ist genau die gleiche wie die Abfrage (man beachte die 7):

e.createdOn >= 2016-06-07 00:00:00.000 

Also, für greater than nur einem Tag auf den anderen Filter hinzufügen Datum:

var dateexpr = Expression.Constant(
       Convert.ToDateTime(filter.FilterValue).Date.AddDays(1), 
       typeof(DateTime) 
       ); 

für less than würde es mit Ihrem ursprünglichen Ausdruck arbeiten.

Und für equals würden Sie brauchen, um den Ausdruck zu komponieren:

e.createdOn >= (your_dateexpression) && e.createdOn < (the expression with one more day) 

Ich werde Sie less than or equal ausrechnen lassen und greater than or equal, sondern nur von der Logik zu denken tun würde :-)

0

Sie können nicht so weit wie ich weiß, nur wenn Sie verwenden die Vergleich auf DateTime Objekte überprüfen gegen die Date Eigenschaft. Zum Beispiel:

if (DateTime1 == DateTime2) { //Date and time match } 

else if (DateTime1.Date == DateTime2.Date) { //Date only matches } 
+0

das Problem, das eine Konstante des Ausdrucks ist, daher sollte ich den Typ angeben und die Eigenschaft ist auch dynamisch, dann kann ich nicht hinzufügen (.Date) in dieser dynamischen Abfrage. wo (e => e.createdOn.date> 2016-06-06 00: 00: 00.000) – SamirJ

+0

Wie können wir dies mit dynamischer Lambda-Expression erreichen? – SamirJ

Verwandte Themen