在IQueryable <t>中映射和执行表达式

时间:2019-03-07 05:01:29

标签: c# entity-framework expression automapper iqueryable

我想创建一个接收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;
}

请让我知道我做错了。

谢谢。

0 个答案:

没有答案