110,539
社区成员
发帖
与我相关
我的任务
分享
public override IList<Model.User> Query(Model.UserCondition condition, int pageSize, int pageIndex, ref int hitCount)
{
int recordCount = 0;
IList<Model.User> userList;
try
{
userList = this.HibernateTemplate.Execute<IList<Model.User>>(
new HibernateDelegate<IList<Model.User>>(
delegate(ISession session)
{
IQuery query;
List<object> objWhereParamList = new List<object>();
string strSQL_Count;
string strSQL_Data;
#region 生成SQL
StringBuilder strSQL_Where = new StringBuilder();
strSQL_Where.Append("WHERE 1=1");
#region 条件
if (!String.IsNullOrEmpty(condition.UserName))
{
strSQL_Where.Append(" AND UserName LIKE ?");
objWhereParamList.Add("%" + condition.UserName + "%");
}
if (!String.IsNullOrEmpty(condition.Email))
{
strSQL_Where.Append(" AND Email LIKE ?");
objWhereParamList.Add("%" + condition.Email + "%");
}
#endregion
strSQL_Count = "SELECT COUNT(UserID) FROM User " + strSQL_Where.ToString();
strSQL_Data = "FROM User " + strSQL_Where.ToString() + " ORDER BY UserID";
#endregion
#region 获取总行数
recordCount = 0;
query = session.CreateQuery(strSQL_Count);
for (int index = 0; index < objWhereParamList.Count; index++)
{
query.SetParameter(index, objWhereParamList[index]);
}
IEnumerator countEnumertor = query.List().GetEnumerator();
if (countEnumertor.MoveNext())
recordCount = Convert.ToInt32(countEnumertor.Current);
#endregion
#region 分页获取数据
if (recordCount == 0)
{
pageIndex = 1;
return new List<Model.User>();
}
else
{
#region 修正页码
if ((pageIndex - 1) * pageSize > recordCount)
{
if (recordCount % pageSize == 0)
pageIndex = recordCount / pageSize;
else
pageIndex = recordCount / pageSize + 1;
}
#endregion
int takeCount = (pageIndex - 1) * pageSize;//跳过的行数
query = session.CreateQuery("from Author order by author_id");
query.SetFirstResult(takeCount);
query.SetMaxResults(pageSize);
return query.List<Model.User>();
}
#endregion
}
)
);
}
catch (Exception ex)
{
throw (ex);
}
hitCount = recordCount;//设置命中的记录数
return userList;
}