2011-03-30 89 views

回答

3

是的。這裏有一個簡單的例子:

var blogs = _session.Query<Blog>() 
    .Take(30) 
    .ToFuture(); 
var blogCount= _session.Query<Blog>() 
    .ToFutureValue(x => x.Count()); 

Console.WriteLine(blogCount.Value); // DB is queried here. 

此處,我已經使用了所顯示分頁的搜索結果和與搜索結果的總數客戶搜索表單的一個例子。注意你可以重用IQueryable來創建兩個期貨。 Filter方法基於用戶搜索的字段構建了一個IQueryable。

int resultsPerPage = 50; 
var query = _session.Query<CustomerSearch>() 
    .FilterById(model) 
    .FilterByFirstName(model) 
    .FilterByLastName(model) 
    .FilterBySocialSecurityNumber(model)  
    .FilterByPrimaryPhoneNumber(model); 
var futureResults = query 
    .OrderBy(x => x.Id) 
    .Skip(model.Page * resultsPerPage) 
    .Take(resultsPerPage) 
    .ToFuture(); 
var futureCount = query.ToFutureValue(x => x.Count()); 
4

要當心ToFuture只有當數據庫驅動程序支持MulitpleQueries工作。在一些驅動程序(例如MySql,SqlServer)中只有這種情況,但並不是所有的(例如Oracle)