Отображение и выполнение выражения в IQueryable <T> - PullRequest
0 голосов
/ 07 марта 2019

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

Пожалуйста, дайте мне знать, что я делаю неправильно.

Заранее спасибо.

...