Я хочу создать универсальный метод, который получает 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;
}
Пожалуйста, дайте мне знать, что я делаю неправильно.
Заранее спасибо.