1

Linqを念頭に置いて何かを数える際にFuturesを使用する方法に興味があります。Criteria api には興味がありません。ただの linq です。

私が持っている場合:

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

直訳は次のようになります。

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

ここで、入力されたレコードの正確な数を知るために count クエリにアクセスする必要があります。

このコードはコンパイルされませんが、次のようなものです。

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 に答える