1

我对如何使用 Futures 计算有 Linq 的东西感兴趣。我对 Criteria api 不感兴趣,只是对普通 linq 感兴趣。

如果我有:

IEnumerable<User> dbUsers = userquery.Future<User>(); 
IFutureValue<long> count = totalcountQuery.FutureValue<long>(); 

直接翻译应该是:

var dbUsers = userQuery.ToFuture();     
var count = userQuery.LongCount(); 

现在我需要访问计数查询以了解填充记录的确切数量;

像这样的东西,虽然这段代码不会编译:

totalRecords = (int)count.Value;
4

2 回答 2

1

NHibernate 不直接支持这一点,但它很容易实现(在这篇文中有解释)。您需要编写一个新的扩展方法。

public static IFutureValue<TResult> ToFutureValue<TSource, TResult>
    (this IQueryable<TSource> source, Expression<Func<IQueryable<TSource>, TResult>> selector)
    where TResult:struct  where TSource: class
{
    var provider = (INhQueryProvider) source.Provider;
    var method = ((MethodCallExpression) selector.Body).Method;
    var expression = Expression.Call(null, method, source.Expression);
    return (IFutureValue<TResult>) provider.ExecuteFuture(expression);
}

然后很容易得到分页查询

var query = session.Query<User>().Where(...);
var count = query.ToFutureValue(u => u.Count());
var results = query.OrderBy(u => u.FullName).Skip(n).Take(m).ToFuture()
于 2012-05-31T14:17:09.303 回答
0

应该是这样的:

var users = Session.Query<User>().ToFuture();
var totalCount = users.Count();
于 2012-05-29T11:40:01.353 回答