2016-07-04 26 views
0

Ich versuche, NHibernate queryover zu schreiben, um alle Datensätze auszuwählen, die zwischen zwei Daten gelöscht wurden. Ich verwende IsBetween(). Und(). Aber wie schreibe ich, wenn ich nicht sowohl das fromdate als auch das todate einbeziehen möchte?NHibernate Queryover, wie man Datum issbetween anwendet, ohne die from und todate

Hier ist meine Frage:

public IEnumerable<DeletedRecord> Search(
    DateTime deletedFrom, 
    DateTime deletedTo 
    ) 
{ 
    DeletedRecord delAlias = null; 
    var query = Session.QueryOver(() => delAlias); 
    query.Where(() => delAlias.DeletedDate.IsBetween(deletedFrom).And(deletedTo)); 

    return query.Future<DeletedRecord>(); 
} 

Kann mir jemand helfen, wie dies zu erreichen, dass ich alle Datensätze nach dem deletedFrom neuesten Stand bringen und vor dem deletedTo Datum?

Dank

Antwort

1

einfach Ihr Datum in zwei Schritten erstellen:

var query = Session.QueryOver(() => delAlias); 

if(youNeedFromDate) //first step 
    query = query.Where(() => delAlias.DeletedDate >= deletedFrom); 
if(youNeedToDate) //second step 
    query = query.Where(() => delAlias.DeletedDate <= deletedTo); 

youNeedFromDate und youNeedToDate sind bool Variablen, die Sie auf Ihre Funktion übergeben können, oder es könnte andere Bedingung auf Ihre Logik sein.

+0

Vielen Dank für die Details. –

1

Solche Fälle passieren ziemlich oft. Definieren der Erweiterungsmethode hilft sehr. siehe unten

public static IQueryOver<T, T> WhereIf<T>(this IQueryOver<T, T> query,bool condition, Expression<Func<T, bool>> expression) where T : class 
    {    
     if (condition) 
     { 
      query = query.And(expression); 
     } 

     return query; 
    } 

Mit der oben Sie können Sie Bedingungen Kette und nur wird es nur schließen die in dem Zustand, wenn der erste arg true ergibt.

var query= Session.QueryOver<DeletedRecord>() 
     .WhereIf(filterByFrom,d=>d.DeletedDate>=fromDate) 
     .WhereIf(filterByTo,d=>d.DeletedDate<=toDate);