Welcome

首页 / 软件开发 / .NET编程技术 / CSLA.Net在Web项目中使用SQL2005的分页

CSLA.Net在Web项目中使用SQL2005的分页2011-01-25 博客园 大熊正用CSLA.NET做一个Web的项目, 发现CSLA的模型在开发Web时, 不是很适合中国国情.

他的一系列模版, 都是基于主从表单的考虑, 比如"采购单", 这样有单头, 有明细行的情况, 这在WinForm下很棒.

但Web下, 大部分对象都单独用一个表单进行编辑, 所以感觉有些别扭.

我的理解还不深入, 还不断学习中, 整个框架让我受益很多. 废话完了, 进入正题.

要在CSLA模型中方便的使用Sql2005的分页, 我们要做四步.

第一步: 实现一个PagingCriteria, 用来传递分页参数.

[Serializable()]

public class PagingCriteria<T> : CriteriaBase
{
#region Filed
public IDictionary ParamDic { get; private set; }
public string SortExpression { get; private set; }
public string DefaultOrder { get; private set; }
public int StartRowIndex { get; private set; }
public int MaximumRows { get; private set; }
#endregion
protected PagingCriteria(){ }
public PagingCriteria(IDictionary paramDic, int startRowIndex, int maximumRows, string sortExpression, string defaultOrder)
: base(typeof(T))
{
ParamDic = paramDic;
SortExpression = sortExpression;
DefaultOrder = defaultOrder;
StartRowIndex = startRowIndex;
MaximumRows = maximumRows;
}
}

第二步: 实现PagingWrapper, 将普通的Sql语句封装成可分页的语句.

public static class PagingWrapper
{
private const string SQLTEMPLATE = @"With TargetTable AS(select ROW_NUMBER() OVER (order by Temp.{1})as RowNumber,Temp.* from ({0}) as Temp) select * from TargetTable WHERE RowNumber between {2} and {3};Select count(*) from ({0}) Temp";
public static string Wrap(string sqlQuery, string SortExpression, int startRowIndex, int maximumRows)
{
if (string.IsNullOrEmpty(SortExpression))
throw new Exception("未指定排序列.");
return string.Format(SQLTEMPLATE, sqlQuery, SortExpression, startRowIndex +1, startRowIndex + maximumRows);
}
public static string Wrap<T>(string sqlQuery, PagingCriteria<T> criteria)
{
string order = (string.IsNullOrEmpty(criteria.SortExpression)) ? criteria.DefaultOrder : criteria.SortExpression;
return Wrap(sqlQuery, order, criteria.StartRowIndex, criteria.MaximumRows);
}
}