NHibernate初学三之条件查询(Criteria Queries)与AspNetPager分页实例(三)

2014-11-24 01:37:21 · 作者: · 浏览: 2
ize:
pi.RecordCount / pi.PageSize + 1;
//qbc.SetProjection(null);
//分页结果
ICriteria _qbc = session.CreateCriteria(pi.EntityType);
prepareConditions(_qbc, pi.Conditions);
//设置排序
prepareOrder(_qbc, pi.OrderFields);
//分页结果
pi.List = _qbc
.SetFirstResult((pi.PageIndex - 1) * pi.PageSize)
.SetMaxResults(pi.PageSize)
.List();
}
}
///
/// 处理条件
///
///
///
private void prepareConditions(ICriteria qbc,params NCondition[] conditions)
{
if (qbc == null || conditions == null || conditions.Length == 0)
{
return;
}
foreach (NCondition condition in conditions)
{
switch (condition.Operate)
{
case Operation.EQ:
qbc.Add(Expression.Eq(condition.PropertyName, condition.PropertyValue));
break;
case Operation.GT:
qbc.Add(Expression.Gt(condition.PropertyName, condition.PropertyValue));
break;
case Operation.LT:
qbc.Add(Expression.Lt(condition.PropertyName, condition.PropertyValue));
break;
case Operation.GE:
qbc.Add(Expression.Ge(condition.PropertyName, condition.PropertyValue));
break;
case Operation.LE:
qbc.Add(Expression.Le(condition.PropertyName, condition.PropertyValue));
break;
case Operation.NE:
qbc.Add(Expression.Not(
Expression.Eq(condition.PropertyName, condition.PropertyValue)
));
break;
case Operation.BETWEEN:
qbc.Add(Expression.Between(
condition.PropertyName,
(condition.PropertyValue as Object[])[0],
(condition.PropertyValue as Object[])[1]
)
);
break;
case Operation.LIKE:
qbc.Add(Expression.Like(
condition.PropertyName,
condition.PropertyValue.ToString(),
MatchMode.Anywhere
)
);
break;
case Operation.IN:
qbc.Add(Expression.In(condition.PropertyName, condition.PropertyValue as object[]));
break;
}
}
}
///
/// 处理排序
///
///
///
private void prepareOrder(ICriteria qbc, params Wujy.ModelLibrary.Pagination.NOrder[] orderFields)
{
if (qbc == null || orderFields == null ||
orderFields.Length == 0)
{
return;
}
foreach (Wujy.ModelLibrary.Pagination.NOrder order in orderFields)
{
qbc.AddOrder(
order.OrderType == Wujy.ModelLibrary.Pagination.NOrder.OrderDirection.ASC
Order.Asc(order.PropertyName) :
Order.Desc(order.PropertyName)
);
}