Agrupamento do lado do servidor da grade Kendo
Estou usando o Asp net 5, NHibernate 3.3 e o Kendo UI MVC wrapper para grade para renderizar a tabela de pedidos do cliente. Já existem muitos pedidos no banco de dados e o número está crescendo constantemente. Por isso, decidi usar a paginação no lado do servidor para evitar buscar todos os pedidos do banco de dados. Tanto quanto sei, você não pode fazer a paginação manualmente e delegar a filtragem, classificação e agrupamento ao método ToDataSourceResult. É tudo ou nada. Por isso, tentei implementar os chamados'ligação personalizada'. Não tem problema até eu chegar ao agrupamento. Preciso agrupar primeiro, depois classificar dentro de um grupo e extrair dados para uma página específica e tudo isso sem carregar todos os dados na memória. Meu código é algo assim (coloquei tudo em uma única peça para simplificar a leitura):
var orderList = CurrentSession.QueryOver<Order>();
// Filtering. Filter is a search string obtained from DataSourceRequest
var disjunction = new Disjunction();
disjunction.Add(Restrictions.On<Order>(e => e.Number).IsLike("%" + filter + "%"));
disjunction.Add(Restrictions.On<Order>(e => e.Customer).IsLike("%" + filter + "%"));
orderList = orderList.Where(disjunction);
// Sorting. sortColumn is also from DataSourceRequest
switch (sortColumn)
{
case "Number":
orderList = orderList.OrderBy(x => x.Number).Desc;
break;
case "GeneralInfo.LastChangeDate":
orderList = orderList.OrderBy(x => x.LastChangeDate).Desc;
break;
default:
orderList = orderList.OrderBy(x => x.Number).Desc;
break;
}
}
// Total is required for kendo grid when you do paging manually
var total = orderList.RowCount();
var orders = orderList
.Fetch(x => x.OrderGoods).Eager
.Fetch(x => x.OrderComments).Eager
.Fetch(x => x.Documents).Eager
.Fetch(x => x.Partner).Eager
.Skip((request.Page - 1)*request.PageSize).Take(request.PageSize).List();
Ficarei feliz em ter algum conselho sobre como adicionar agrupamentos aqui.