我想创建一个接收Expression<Func<IQueryable<TDTO>, IQueryable<TDTO>>>
并映射到Expression<Func<IQueryable<TEntity>, IQueryable<TEntity>>>
然后,使用EF执行该表达式。
我正在使用Automapper Expression Translate进行表达式之间的映射,但是我不知道如何执行该表达式。
这是我映射表达式的方式:
public List<DTO.Category> GetPaged(int page, int pageSize, Expression<Func<IQueryable<DTO.Category>, IQueryable<DTO.Category>>> predicate)
{
var expression = Mapper.Map<Expression<Func<IQueryable<Category>, IQueryable<Category>>>>(predicate);
return Mapper.Map<List<Category>, List<DTO.Category>>
(
_repository.Paged(page, pageSize, expression).Results.ToList()
);
}
然后,我需要执行表达式的下一个扩展方法:
public static PagedResult<T> GetPaged<T>(this IQueryable<T> query, int page, int pageSize, Expression<Func<IQueryable<T>, IQueryable<T>>> predicate) where T : class
{
var result = new PagedResult<T>();
result.CurrentPage = page;
result.PageSize = pageSize;
result.RowCount = query.Count();
var pageCount = (double)result.RowCount / pageSize;
result.PageCount = (int)Math.Ceiling(pageCount);
var skip = (page - 1) * pageSize;
result.Results = query.Provider.CreateQuery<T>(predicate).ToList(); -- This is what I tried but it doesn't work
return result;
}
请让我知道我做错了。
谢谢。