public List<T> getPageData2(Expression<Func<T, bool>> where, Expression<Func<T, object>> order, int pageIndex, int pageSize, out int Total) { //条件 var queryList = where != null ? entities.Where(where) : entities; //排序 queryList = order != null ? queryList.OrderByDescending(order) : queryList; //总数量 Total = queryList.Count(); return queryList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); }
我找了很久还是没有解决这个问题,请问为什么这样写Expression就会报错呢,而我直接用Func<T, bool> 就不会。是我的写法有问题吗?
Func<TObject, bool>是委托
Expression<Func<TObject, bool>>是表达式
Expression编译后就会变成delegate,才能运行。比如
Expression<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex.Compile();
参考:http://q.cnblogs.com/q/37952/
我知道一个是委托,一个表达式。但是我不明白的就是这里写法好像没有问题,为什么转换list的时候报错,而且Total = queryList.Count();也会报错。指教一下,谢谢
@米粒儿。:
改成int试试,报错是显示类型转换问题,
@莫宇: 好了,太感谢了。
@莫宇: 不好意思,上次解决之后int 类型太死了,还有别的写法或者解决方案吗
你好博主,你可以把你的分页使用方法贴出来吗? 我用的方法会一直报错。
public List<T> getPageData2<dynamic>(Expression<Func<T, bool>> where, Expression<Func<T, dynamic>> order, int pageIndex, int pageSize, out int Total)
试试这个吧。