1 c# nhibernate pagination dynamic
我非常需要帮助.
我正在使用Criteria进行动态查询:
ICriteria query = session.CreateCriteria(typeof(Employee));
if (searchOptions.FirstName != null)
{
query.Add(Expression.Eq("FirstName", searchOptions.FirstName));
}
if (!searchOptions.LastName != null)
{
query.Add(Expression.Eq("LastName", searchOptions.LastName));
}
if (searchOptions.PhoneNumber != null)
{
query.CreateCriteria("PhoneNumbers")
.Add(Expression.Like("Number", searchOptions.PhoneNumber + "%"));
}
Run Code Online (Sandbox Code Playgroud)
在此之后,我需要同时拥有Total Row Count和Pagination.
分页:
query.SetFirstResult(0).SetMaxResults(8);
Run Code Online (Sandbox Code Playgroud)
对于rowcount:
query.SetProjection(Projections.RowCountInt64());
Run Code Online (Sandbox Code Playgroud)
如何通过使用MultiCriteria或其他方法在单个查询中执行这两个操作.
请帮忙!
你可以在nhibernate 2.0 Efficient Data Paging DataList Control和ObjectDataSource中看到我的答案.
再次编码:
protected IList<T> GetByCriteria(
ICriteria criteria,
int pageIndex,
int pageSize,
out long totalCount)
{
ICriteria recordsCriteria = CriteriaTransformer.Clone(criteria);
// Paging.
recordsCriteria.SetFirstResult(pageIndex * pageSize);
recordsCriteria.SetMaxResults(pageSize);
// Count criteria.
ICriteria countCriteria = CriteriaTransformer.TransformToRowCount(criteria);
// Perform multi criteria to get both results and count in one trip to the database.
IMultiCriteria multiCriteria = Session.CreateMultiCriteria();
multiCriteria.Add(recordsCriteria);
multiCriteria.Add(countCriteria);
IList multiResult = multiCriteria.List();
IList untypedRecords = multiResult[0] as IList;
IList<T> records = new List<T>();
if (untypedRecords != null)
{
foreach (T obj in untypedRecords)
{
records.Add(obj);
}
}
else
{
records = new List<T>();
}
totalCount = Convert.ToInt64(((IList)multiResult[1])[0]);
return records;
}
Run Code Online (Sandbox Code Playgroud)
它将原始条件克隆两次:一个返回页面记录的条件和一个总记录计数的条件.它还使用IMultiCriteria在一次往返中执行两个数据库调用.
| 归档时间: |
|
| 查看次数: |
3701 次 |
| 最近记录: |