【发布时间】:2012-10-08 22:36:11
【问题描述】:
我有一个 MVC 项目,我正在尝试为其设置一个不错的分页解决方案。
我在 SQL Server 中有几个表,它们有几千行,我希望能够翻页。如果我没有任何类型的过滤器可应用于分页,它会很好用。这是我用来执行此操作的方法:
public virtual PagedList<T> GetPagedData(int startIndex, int count) {
var rowCount = session.CreateCriteria(typeof(T)).SetProjection(Projections.RowCount()).FutureValue<Int32>().Value;
var pageOfItems = session.CreateCriteria(typeof(T)).SetFirstResult(startIndex).SetMaxResults(count).List<T>();
return new PagedList<T>(pageOfItems, startIndex, count, rowCount);
}
我还希望能够传入查询以进一步缩小结果范围,并返回一个新的分页表。到目前为止我所拥有的是:
public virtual PagedList<T> GetPagedData<T>(int startIndex, int count, System.Linq.Expressions.Expression<Func<T, bool>> predicate) where T : class {
var rowCount = session.QueryOver<T>().Where(predicate).Select(Projections.RowCount()).FutureValue<Int32>().Value;
var pageOfItems = session.QueryOver<T>().Where(predicate).Skip(startIndex).Take(count).List<T>();
return new PagedList<T>(pageOfItems, startIndex, count, rowCount);
}
对 this 的调用如下所示:
networks = mRepository.GetPagedData<Network>(page ?? 1, pageSize, x => x.Name.Contains(q));
问题是,它不喜欢“包含”表达式。如果我进行完全匹配,它可以正常工作(x.Name == q),但我没有得到我想要的结果。
我看到的使用“包含”的异常是:
无法识别的方法调用:System.String:Boolean Contains(System.String)
有没有人知道如何让它动态地接受这样的表达式?我有一个基础存储库类,我已将它放入其中,因为我将对其他几个表使用相同类型的行为。我可以为每个表编写一个单独的方法,但如果可能的话,我宁愿动态地这样做。
感谢您的建议!
【问题讨论】:
标签: c# asp.net-mvc nhibernate