2016-07-04 31 views
0

我想編寫NHibernate的查詢,以選擇已被刪除兩個日期之間的所有記錄。我正在使用IsBetween()。和()。但是,如果我不想同時包含fromdate和todate,我該如何寫?NHibernate的查詢如何申請日期isbetween不包括從和todate

這裏是我的查詢:

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>(); 
} 

誰能幫助我如何實現這樣我可以在deletedFrom日後及deletedTo日期前把所有的記錄?

感謝

回答

1

只是構建2步你的約會:

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

youNeedFromDateyouNeedToDatebool變量可以傳遞給你的函數,也可能是在你的邏輯不同的條件。

+0

謝謝你的細節。 –

1

這種情況經常發生。定義擴展方法有很大幫助。見下面

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; 
    } 

使用上面你可以鏈條件條件,只有它將只包括where條件,如果第一個arg的計算結果爲true。

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