我正在使用EntityFramework Code First通用仓储库。我有一个过滤器方法。此方法还可以进行分页和排序。方法如下所示:
public IQueryable<TEntity> Filter(Expression<Func<TEntity, bool>> filter, out int total, Expression<Func<TEntity, object>> sorting, SortType sortDirection, int index = 1, int size = 30)
{
index = index - 1;
int skipcount = index * size;
IQueryable<TEntity> resetSet = filter != null ? Entities.Where(filter) : Entities.AsQueryable();
total = Entities.Where(filter).Count();
if (sortDirection == SortType.Desc)
{
resetSet = skipcount == 0 ?
resetSet.Where(filter).OrderByDescending(sorting).Skip(0).Take(size) :
resetSet.Where(filter).OrderByDescending(sorting).Skip(skipcount).Take(size);
}
else
{
resetSet = skipcount == 0 ?
resetSet.Where(filter).OrderBy(sorting).Skip(0).Take(size) :
resetSet.Where(filter).OrderBy(sorting).Skip(skipcount).Take(size);
}
return resetSet.AsQueryable();
}
排序类型是Expression<Func<TEntity, object>>
。如果我将此参数作为Expression<Func<TEntity, object>>
传递,则会出现无效的强制转换异常,但是Expression<Func<TEntity, string>>
不会引发任何异常。
有什么想法 谢谢
Expression
API 生成它吗? - Thomas Levesqueskipcount == 0
的测试是多余的:使用Skip(skipcount)
和Skip(0)
结果相同... - Thomas Levesque