首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nhibernate将ICriteria迁移到QueryOver

Nhibernate将ICriteria迁移到QueryOver
EN

Stack Overflow用户
提问于 2016-11-06 06:01:04
回答 1查看 336关注 0票数 1

我们正在使用ICriteria,现在我们希望切换到Nhibernate中更具可读性的QueryOver

有人能给我一个提示吗?如何将Icriteria的通用分页逻辑转换为QueryOver?

代码语言:javascript
复制
public static PagedList<T> PagedList<T>(this ICriteria criteria, 
    ISession session, int pageIndex, int pageSize) where T : class
{
    if (pageIndex < 0)
        pageIndex = 0;

    var countCrit = (ICriteria)criteria.Clone();
    countCrit.ClearOrders(); // so we don’t have missing group by exceptions

    var results = session.CreateMultiCriteria()
        .Add<long>(countCrit.SetProjection(Projections.RowCountInt64()))
        .Add<T>(criteria.SetFirstResult(pageIndex * pageSize).SetMaxResults(pageSize))
        .List();

    var totalCount = ((IList<long>)results[0])[0];

    return new PagedList<T>((IList<T>)results[1], totalCount, pageIndex, pageSize);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-07 12:47:04

我使用它的方式:

代码语言:javascript
复制
var session = ... // get a ISession

// the QueryOver
var query = session.QueryOver<MyEntity>();
// apply all filtering, sorting...
query...

// GET A ROW COUNT query (ICriteria)
var rowCount = CriteriaTransformer.TransformToRowCount(query.UnderlyingCriteria);

// ask for a list, but with a Future, to combine both in one SQL statement
var list = query
    .Future<MyEntity>()
    .ToList();

// execute the main and count query at once
var count = rowCount
    .FutureValue<int>()
    .Value;

// list is now in memory, ready to be used
var list = futureList
    .ToList();

因此,我们正在使用QueryOver,并从潜在的标准和转换器中获益。使用Future,,我们还可以在一个命令中执行所有这些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40446487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档