Asp.net 如何在NHibernate中创建通用分页搜索方法

Asp.net 如何在NHibernate中创建通用分页搜索方法,asp.net,nhibernate,Asp.net,Nhibernate,我有几个网格界面,带有一些搜索/筛选功能。。。筛选器的数目为“randon” 例如,在我的彩色UI中,我有一个onde过滤器:Name。。。我的分页/搜索方法是: public IEnumerable<Color> Search(string nameSearch, string order, int pageSize, int pageIndex, bool ascending, out int totalCount) { var query = Session.Query

我有几个网格界面,带有一些搜索/筛选功能。。。筛选器的数目为“randon”

例如,在我的彩色UI中,我有一个onde过滤器:Name。。。我的分页/搜索方法是:

public IEnumerable<Color> Search(string nameSearch, string order, int pageSize, int pageIndex, bool ascending, out int totalCount)
{
    var query = Session.QueryOver<Color>();
    var rowCountQuery = query.ToRowCountQuery();

    query.Where(color => color.Name.IsLike(nameSearch, MatchMode.Anywhere));

     if (ascending)
         query.OrderBy(x => x.Name).Asc();
     else
         query.OrderBy(x => x.Name).Desc();

     query.Take(__pageSize).Skip((pageIndex) * pageSize)
         .Future();

     totalCount = rowCountQuery.FutureValue<int>().Value;

     return query.List();
}
public IEnumerable搜索(字符串名称搜索、字符串顺序、int pageSize、int pageIndex、bool升序、out int totalCount)
{
var query=Session.QueryOver();
var rowCountQuery=query.ToRowCountQuery();
query.Where(color=>color.Name.IsLike(nameSearch,MatchMode.Anywhere));
if(升序)
query.OrderBy(x=>x.Name).Asc();
其他的
query.OrderBy(x=>x.Name).Desc();
query.Take(u pageSize).Skip((pageIndex)*pageSize)
.Future();
totalCount=rowCountQuery.FutureValue().Value;
返回query.List();
}
到目前为止,它运行良好。。。但是我有其他几个具有相同功能的UI,我想创建一个通用的serach函数。。。 是否已经实施了类似的措施


任何帮助都将不胜感激

您可能需要考虑创建一个对象来保存分页参数并验证order列,但是您可以创建一个简单的分页函数,如下所示

public IEnumerable<Color> Search(string nameSearch, string order, int pageSize, int pageIndex, bool ascending, out int totalCount)
{
    var query = Session.QueryOver<Color>();

    query.Where(color => color.Name.IsLike(nameSearch, MatchMode.Anywhere));

    return Page(query, order, pageSize, pageIndex, ascending, out totalCount);
}

public IEnumerable<T> Page<T>(IQueryOver<T,T> query, string order, int pageSize, int pageIndex, bool ascending, out int totalCount)
{
     var rowCountQuery = query.ToRowCountQuery();

     query.UnderlyingCriteria.AddOrder(new Order(order, ascending));

     query.Take(pageSize).Skip((pageIndex) * pageSize)
         .Future();

     totalCount = rowCountQuery.FutureValue<int>().Value;

    return query.List();
}
public IEnumerable搜索(字符串名称搜索、字符串顺序、int pageSize、int pageIndex、bool升序、out int totalCount)
{
var query=Session.QueryOver();
query.Where(color=>color.Name.IsLike(nameSearch,MatchMode.Anywhere));
返回页面(查询、订单、页面大小、页面索引、升序、out totalCount);
}
公共IEnumerable页(IQueryOver查询、字符串顺序、int pageSize、int pageIndex、bool升序、out int totalCount)
{
var rowCountQuery=query.ToRowCountQuery();
query.underlineCriteria.AddOrder(新订单(订单,升序));
query.Take(pageSize).Skip((pageIndex)*pageSize)
.Future();
totalCount=rowCountQuery.FutureValue().Value;
返回query.List();
}

出于好奇,所有的下划线是怎么回事?只是约定:Parameter=\uuuuuuuu,local method variable\uuuuu,让我猜一下,静态只读字段是\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?在构建where子句后,您应该调用
ToRowCountQuery()
,还是您想要总计数而不考虑过滤器?